ferror

ferror

파일 스트림에 오류가 발생했는지 확인할 때 써요. 읽기·쓰기 과정에서 입출력 오류가 있었는지 감지하는 데 쓰여요.

출처: cppreference

본문

문법 (Syntax)

int ferror ( FILE * stream );

설명 (Explanation)

주어진 스트림에 오류가 발생했는지 확인해요.

매개변수 (Parameters)

  • stream — 확인할 파일 스트림

반환값 (Return value)

파일 스트림에 오류가 발생했으면 0이 아닌 값, 아니면 0을 반환해요.

예시 (Example)

UTF-8로 읽기를 시도했을 때 잘못된 바이트 열 때문에 오류 표시기가 세워지는 걸 보여줘요. \xff\xff는 유효한 UTF-8 시퀀스가 아니고, 그걸 읽으려는 fgetwc 호출이 실패하면서 ferror가 오류를 감지해요.

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
 
int main(void)
{
    char* fname = tmpnam(NULL);
    FILE* f = fopen(fname, "wb");
    fputs("\xff\xff\n", f); // not a valid UTF-8 character sequence
    fclose(f);

    setlocale(LC_ALL, "en_US.utf8");
    f = fopen(fname, "rb");
    wint_t ch;
    while ((ch=fgetwc(f)) != WEOF) // attempt to read as UTF-8 fails
          printf("%#x ", ch);
    
    if (feof(f))
        puts("EOF indicator set");
    if (ferror(f))
        puts("Error indicator set");
}

가능한 출력 (Possible output):

Error indicator set

유효하지 않은 UTF-8을 읽으려다 실패해서 ferror가 오류를 잡아낸 걸 볼 수 있어요. 이 경우 feof는 세워지지 않아요.

참고 문헌 (References)

  • C11 표준 (ISO/IEC 9899:2011): 7.21.10.3 The ferror function (p: 339)
  • C99 표준 (ISO/IEC 9899:1999): 7.19.10.3 The ferror function (p: 305)
  • C89/C90 표준 (ISO/IEC 9899:1990): 4.9.10.3 The ferror function

더 알아보기

  • 파일 끝인지 확인하려면 feof을 보세요. ferror과 짝을 이루는 함수예요.
  • 오류 상태를 지우려면 clearerr을 쓰세요.
  • cppreference 원문에서 ferror의 자세한 내용을 확인할 수 있어요.