ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C/C++ ferror(3) feof(3) clearerr(3)
    C,C++ & Linux 2020. 5. 21. 21:36
    728x90

    함수 기능

    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

    댓글

Designed by Tistory.