-
C/C++ ferror(3) feof(3) clearerr(3)C,C++ & Linux 2020. 5. 21. 21:36728x90
함수 기능
ferror() : 파일 포인터의 에러 플래그가 1인지 확인해주는 함수
feof() : 파일 포인터의 EOF 플래그가 1인지 확인해주는 함수
clearerr() 파일 포인터의 플래그 변수를 초기화해주는 함수
fgetc(), getc(), gets() 이런 함수들을 쓰면 파일의 끝에 다다르거나 에러가 발생하게 되면 EOF를 리턴합니다.
이 때 개발자는 이것이 에러인지 아닌지 구분하기위해 feof(), ferror() 함수를 사용하고
이에 대한 적절한 조치가 이루어진 뒤 clearerr() 함수를 통해 에러 플래그와 EOF 플래그를 초기화시켜줍니다.
함수 원형
#include <stdio.h> int ferror(FILE *fp); int feof(FILE *fp); void clearerr(FILE *fp);
매개변수
fp
대상 파일 포인터
반환값
ferror()
에러 플래그가 1 이라면(에러가 발생한 것) 0이 아닌 정수를 리턴
아니라면 0을 리턴
feof()
EOF 플래그가 1이라면(에러가 발생하지 않은 것) 0이 아닌 정수를 리턴
에러 발생 시 0을 리턴
예제
#include <stdio.h> #include <stdlib.h> #include <unistd.h> int main(int argc, char *argv[]) { FILE *fp; int character; if ((fp = fopen(argv[1], "r")) == NULL) { fprintf(stderr, "fopen error\n"); exit(1); } // 문자 하나 읽기 character = fgetc(fp); // 파일의 끝에 다다를때까지 읽기 while (!feof(fp)) { // 읽은 문자를 바로 출력 fputc(character, stdout); // 에러 발생 시 문구 출력 후 에러 플래그 초기화 if (ferror(fp)) { fprintf(stderr, "Error 발견!\n"); clearerr(fp); } character = fgetc(fp); } fclose(fp); exit(0); }
결과
리눅스시스템프로그래밍 저자 : 홍지만
https://book.naver.com/bookdb/book_detail.nhn?bid=14623672
책에 기술된 예제 프로그램입니다. 책 내부에는 훨씬 더 많은 자료가 있습니다. (개인적으로 좋았습니다.)'C,C++ & Linux' 카테고리의 다른 글
C/C++ putc(3), fputc(3), putchar(3) (0) 2020.05.22 C/C++ ungetc(3) (0) 2020.05.22 C/C++ getc(3) fgetc(3) getchar(3) (0) 2020.05.21 C/C++ fflush(3) (0) 2020.05.21 C/C++ setbuf(3) setvbuf(3) (0) 2020.05.21