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)를 호출한 뒤 feof가 0을 반환해서 "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의 자세한 내용을 확인할 수 있어요.