줄단위 입력
#include<stdio.h>
char* fgets(char *buf, int n, FILE *fp);
기능
fp로 부터 입력, buf는 '\0'으로 끝난다.
\n이 나올때까지 입력받아 \n까지 포함하여 buf에 저장.
입력한 문자열이 n-1을 초과하면 n-1개의 문자만 돌려준다.
char *gets(char* buf);
기능
표준 입력으로부터 문자열을 읽음.
버퍼의 영역을 넘어 데이터를 쓰는 오류. (보안상 위험도 가능)
\n문자를 buf에 저장하지 않음.
줄단위 출력
#include<stdio.h>
int fputs(const char *str, FILE *fp); // 스트림에 str을 쓴다. (\0문자 제외)
int puts(const char *str); // 표준 출력장치에 str을 쓴다.
리턴 : 성공시 출력한 문자수, 실패시 -1
이진 입출력의 필요성
- 구조체 전체를 읽거나 쓰기 원할 때. 원하는 만큼 데이터를 읽고 쓸 수 있도록
Binary I/O
문제점 : 데이터를 쓴 시스템과 읽는 시스템이 다를 때 문제 발생.
- 구조체 각 필드에 대한 저장 단위. Little Endian-Big Endian.
해결방법 : 고수준의 프로토콜에 의해 데이터 변환을 수행.
#include<stdio.h>
size_t fread(void *ptr, size_t size, size_t nobj, FILE *fp);
기능 : 지정된 스트림에서 size만큼을 nobj개만큼 읽는다.
리턴 : 성공시 입력에 성공한 nobj 개수. 오류나 EOF를 만나면 nobj 개수가 작거나 0.
size_t fwrite(const void *ptr, size_t size, size_t nobj, FILE *fp);
기능 : 지정된 스트림에서 size만큼을 nobj개만큼 쓴다.
리턴 : 성공시 출력에 성공한 nobj 개수. 오류나 EOF를 만나면 nobj 개수가 작거나 0.
오프셋 변경
#include<stdio.h>
long ftell(FILE *fp);
기능 : 파일의 현재 offset 리턴.
int fseek(FILE *fp, long offset, int whence);
기능 : 파일의 offset변경
리턴 : 성공시 0, 실패시 -1
whence : lseek()와 같음. (SEEK_SET, SEEK_CUR, SEEK_END);
void rewind()
기능 : 파일의 오프셋을 처음으로 이동.
int fgetpos(FILE *fp, fpos_t *pos);
int fsetpos(FILE *fp, const fpos_t *pos);
Formatted Output
#include<stdio.h>
int printf(const char *format,...); // 표준 출력에 형식화된 출력 수행.
int fprintf(FILE *fp, const char *format,...); // 주어진 스트림에 출력 수행.
int sprintf(char *buf, const char *format,...); // buf 메모리에 형식화된 출력 수행.
리턴 : 출력한 문자수.
#include<stdarg.h>
#include<stdio.h>
int vprintf(const char *format,...);
int vfprintf(FILE *fp, const char *format,...);
int vsprintf(char *buf, const char *format,...);
가변인자 리스트를 arg로 대체한 형태
Formatted Input
#include<stdio.h>
int scanf(const char *format,...); // 표준 출력에 형식화된 입력 수행.
int fscanf(FILE *fp, const char *format,...); // 주어진 스트림에 입력 수행.
int sscanf(char *buf, const char *format,...); // buf 메모리에 형식화된 입력 수행.
리턴 : 성공시 읽은 문자수, 실패시 EOF
오류검사 함수
#include<stdio.h>
int ferror(FILE *fp); // _IOERR를 FILE구조체에서 검사. (오류)
int feof(FILE *fp); // _IOEOF를 FILE구조체에서 검사. (파일의 끝)
리턴 : 참이면 0이 아닌값. 거짓이면 0
void clearerr(FILE *fp);
기능 : _IOERR, _IOEOF 비트 리셋.
임시파일 생성
#include<stdio.h>
char* tmpnam(char *ptr);
기능 : ptr 버퍼 혹은 리턴값(ptr==NULL일때)으로 임시파일명 이름을 생성.
FILE* tmpfile(void);
기능 : "wb+"모드로 파일 생성 후 스트림 포인터 리턴.
'컴퓨터 공부 > Advanced UNIX System Programming' 카테고리의 다른 글
[4월 30일 2교시] 프로그램 개발 환경2 + 프로세스1 (0) | 2009.04.30 |
---|---|
[4월 30일 1교시] 프로그램 개발 환경1 (0) | 2009.04.30 |
[4월 29일 2교시] 라이브러리 파일 관련 함수 2 (0) | 2009.04.29 |
[4월 29일 1교시] 라이브러리 파일 관련 함수 1 (0) | 2009.04.29 |
[4월 28일 3교시] 파일 및 디렉터리 관련 시스템 콜 (0) | 2009.04.28 |