clearerr

clearerr

파일 스트림에 붙어 있는 오류 플래그와 파일 끝(EOF) 표시기를 리셋할 때 써요. 한 번 발생한 오류 상태가 계속 남아 있으면 이후 읽기·쓰기에 지장을 주니까, 상황이 정리됐다고 판단될 때 명시적으로 지워주는 용도예요.

출처: cppreference

본문

문법 (Syntax)

void clearerr ( FILE * stream );

설명 (Explanation)

주어진 파일 스트림의 오류 플래그와 EOF 표시기를 리셋해요.

매개변수 (Parameters)

  • stream — 상태를 지울 파일 스트림

반환값 (Return value)

없음(void)

예시 (Example)

파일을 끝까지 읽어 EOF에 도달한 뒤, clearerr로 EOF 표시기를 지우면 이후 동작이 어떻게 달라지는지 보여주는 코드예요.

#include <stdio.h>
#include <assert.h>
 
int main(void)
{
    FILE* tmpf = tmpfile();
    fputs("cppreference.com\n", tmpf);
    rewind(tmpf);

    for (int ch; (ch = fgetc(tmpf)) != EOF; putchar(ch)) { }
      
    assert(feof(tmpf)); // the loop is expected to terminate by EOF
    puts("End of file reached");
    
    clearerr(tmpf); // clear EOF

    puts(feof(tmpf) ? "EOF indicator set" 
                    : "EOF indicator cleared");
}

가능한 출력 (Possible output):

cppreference.com
End of file reached
EOF indicator cleared

clearerr(tmpf)를 호출한 뒤 feof0을 반환해서 "EOF indicator cleared"가 찍히는 걸 확인할 수 있어요.

참고 문헌 (References)

  • C17 표준 (ISO/IEC 9899:2018): 7.21.10.1 The clearerr function (p: 246)
  • C11 표준 (ISO/IEC 9899:2011): 7.21.10.1 The clearerr function (p: 338)
  • C99 표준 (ISO/IEC 9899:1999): 7.19.10.1 The clearerr function (p: 304)
  • C89/C90 표준 (ISO/IEC 9899:1990): 4.9.10.1 The clearerr function

더 알아보기

  • 파일 끝인지 확인하려면 feof, 오류가 났는지 확인하려면 ferror을 보세요.
  • 현재 오류에 해당하는 문자열을 stderr로 출력하려면 perror을 쓰세요.
  • cppreference 원문에서 clearerr의 자세한 내용을 확인할 수 있어요.