컴퓨터 공부/Advanced UNIX System Programming

[4월 29일 3교시] 라이브러리 파일 관련 함수 3

려리군 2009. 4. 29. 11:21

줄단위 입력

#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+"모드로 파일 생성 후 스트림 포인터 리턴.