본문 바로가기
Programming/열혈 TCP, IP 소켓 프로그래밍(저자 윤성우)

표준 파일 입출력 함수(고수준 파일 입출력 함수)

by minjunkim.dev 2020. 7. 30.

    TCP/IP 소켓 프로그래밍에서는 저수준 파일 입출력 뿐만 아니라, 고수준 파일 입출력도 합니다. Ch 15에 가면 이에 대해 비교적 자세히 다루겠지만, 먼저 표준 파일 입출력 함수에 대해서 정리하는게 앞으로의 수월한 진행을 위해 좋을 것 같다는 생각이 들어 표준 파일 입출력 함수에 대해서 간단히 정리해보려고 합니다.

 

    http://www.cplusplus.com/reference/cstdio/ 를 기반으로 제가 정리하여 작성하였고, 틀린 내용이 있을 수 있습니다. 이 점을 유념하고 봐주세요!


int fgetc ( FILE * stream );
// 스트림에서 문자 하나를 read함
// 성공하면 문자 하나를 읽어 int형으로 반환
// 파일위치 지시자가 파일의 끝을 가리키고 있거나,
// 읽기를 실패하면 EOF 반환

 

int fputc ( int character, FILE * stream );
// 스트림에 지정한 문자를 write함
// 성공시 write한 문자를 반환
// 쓰기 오류가 발생하면 EOF 반환

 

char * fgets ( char * str, int num, FILE * stream );
// 스트림에서 최대 (num-1)개의 문자를 읽거나,
// 개행문자('\n') 또는 파일의 끝에 도달할 때까지
// 문자를 C 문자열(끝에 널문자 포함)로 str에 저장
// 중간에 개행문자를 만나면 해당 개행문자까지 str에 복사되고,
// 끝에 널문자가 자동으로 추가됨
// 성공시 str 반환, 실패시 NULL 반환

 

int fputs ( const char * str, FILE * stream );
// str이 가리키는 C 문자열을 지정한 스트림에 write함
// str의 널문자를 만날때까지 스트림에 복사하지만,
// 이 때, 널문자는 스트림에 복사되지 않음!
// 성공시, 음수가 아닌 값을 반환
// 실패시, EOF를 반환

 

int fscanf ( FILE * stream, const char * format, ... );
// 스트림에서 데이터를 읽고, 매개 변수 형식에 따라 추가 인수가 가리키는 위치에 저장
// 성공하면 추가 인수 목록의 항목이 성공적으로 채워진 항목 수를 반환
// 읽기 오류나 파일 끝에 도달하면 EOF 반환

 

int fprintf ( FILE * stream, const char * format, ... );
// 형식으로 지정된 C 문자열을 스트림에 write함
// format 매개 변수 다음에 함수는 format에 지정된 만큼의 추가 인수가 필요
// 성공하면 쓴 총 문자 수가 반환
// 쓰기 오류 발생시 음수가 반환

 

int feof ( FILE * stream );
// 파일위치 지시자가 파일의 끝(EOF, -1)을 가리키는지 확인하는 함수
// 끝을 가리키지 않으면 0을, 끝을 가리키면 0이 아닌 값을 반환
// 주의해야 할 점은, 파일위치 지시자가 EOF를 가리키는 순간에도 0을 반환하고
// EOF를 지나고 나서야 feof 함수를 호출해야 비로소 0이 아닌 값을 반환

 

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
// 스트림에서 한 요소가 size 바이트이고 요소가 count개인 배열을
// ptr로 지정된 메모리 블록에 저장
// 성공한 경우 읽은 총 바이트 수는 (size * count)
// 성공적으로 읽은 총 요소 수를 반환
// 반환값이 count 매개 변수와 다른 경우,
// 읽기 오류가 발생했거나 읽기 중에 파일 끝에 도달한 것임

 

size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
// ptr이 가리키는 메모리 블록을 스트림에 write
// ptr은 크기가 size 바이트인 요소를 count개를 가진 배열
// (size * count) 바이트 각각을 스트림에 순차적으로 write
// 성공시 write한 총 요소 수를 반환
// 반환값이 count 매개 변수와 다르면 쓰기 오류 발생 의미 

 

int fseek ( FILE * stream, long int offset, int origin );
// 파일위치 지시자를 새 위치로 설정하는 함수
// 성공하면 함수는 0을 반환하고, 그렇지 않으면 0이 아닌 값을 반환

오프셋(offset)
이진 파일 : 원점에서 오프셋 할 바이트 수
텍스트 파일 : 0 또는 ftell이 반환한 값

Constant Reference position
SEEK_SET Beginning of file
SEEK_CUR Current position of the file pointer
SEEK_END End of file *

 

long int ftell ( FILE * stream );
// 파일위치 지시자의 현재 값을 반환하는 함수
// 이진 모드 스트림의 경우 파일 시작 부분부터 바이트 수를 반환
// 텍스트 모드 스트림의 경우 값은 의미가 없으나,
// ftell 반환 값으로 fseek을 이용하면
// 현재의 위치로 파일위치 지시자를 설정 가능
// 실패시 NULL을 반환하고 errno는 시스템 특정 양수 값으로 설정

 

void rewind ( FILE * stream );
// 스트림의 파일위치 지시자를 파일의 시작 부분으로 설정
// fseek(stream, 0, SEEK_SET); 과 동일한 효과
// 그러나, fseek와 달리 rewind는 오류 지정자를 초기화
// 따라서, 스트림이 읽기 및 쓰기 형식으로 열려있을 경우,
// rewind 함수를 호출함으로써 읽기에서 쓰기 모드로, 쓰기에서 읽기 모드로 변경 가능

 

 

[출처] : http://www.cplusplus.com/reference/cstdio/