Standard C
C 언어 ferror 사용법 완벽 가이드
레퍼러
2025. 2. 22. 13:41
ferror 함수는 C 언어에서 파일 스트림의 오류 상태를 확인할 때 사용됩니다. 파일 입출력 작업 중 오류가 발생했는지 판단하여 안정적인 프로그램을 구현할 수 있도록 도와줍니다.
1. ferror 함수 기본 문법
#include <stdio.h>
int ferror(FILE *stream);
매개변수 설명:
- stream: 오류 상태를 확인할 파일 포인터입니다.
반환 값:
- 0: 오류가 발생하지 않은 경우
- 0이 아닌 값: 오류가 발생한 경우
2. ferror 사용 목적
- 파일 읽기/쓰기 중 발생한 오류 확인
- 오류 발생 시 적절한 오류 처리 수행
- clearerr 함수와 함께 사용하여 오류 상태 초기화
3. 기본 사용 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
char buffer[100];
fread(buffer, sizeof(char), 200, file); // 존재하지 않는 데이터 읽기 시도
if (ferror(file)) {
printf("파일 읽기 중 오류가 발생했습니다.\\n");
} else {
printf("파일을 정상적으로 읽었습니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
파일 읽기 중 오류가 발생했습니다.
4. 실전 활용 예제
4.1. 파일 쓰기 중 오류 확인
#include <stdio.h>
int main() {
FILE *file = fopen("readonly.txt", "w");
if (!file) {
perror("파일 열기 실패");
return 1;
}
if (fprintf(file, "쓰기 테스트입니다.\\n") < 0) {
if (ferror(file)) {
printf("파일 쓰기 중 오류가 발생했습니다.\\n");
}
}
fclose(file);
return 0;
}
출력 결과:
파일 쓰기 중 오류가 발생했습니다.
4.2. clearerr와 함께 사용
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
fgetc(file);
fgetc(file);
if (ferror(file)) {
printf("파일 읽기 중 오류 발생. 상태 초기화 중...\\n");
clearerr(file);
}
if (!ferror(file)) {
printf("오류 상태가 초기화되었습니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
오류 상태가 초기화되었습니다.
5. ferror 사용 시 주의할 점
- 읽기/쓰기 함수 호출 후 사용: ferror는 파일 입출력 함수 호출 후 오류 발생 여부를 확인하는 용도로 사용해야 합니다.
- clearerr로 오류 초기화: 오류 발생 후 clearerr를 사용하여 상태를 초기화하지 않으면 이후 작업에 영향을 줄 수 있습니다.
- perror와 함께 상세 오류 출력: perror를 사용하여 시스템에서 발생한 구체적인 오류 메시지를 출력할 수 있습니다.
6. 오류 처리 예제
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
if (ferror(file)) {
printf("파일 열기 후 오류가 발생했습니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
파일 열기 실패: No such file or directory
7. 결론
ferror 함수는 파일 입출력 작업 중 발생할 수 있는 오류를 감지하고 처리하는 데 매우 중요한 함수입니다. 안정적이고 견고한 파일 입출력 프로그램을 구현하려면 ferror를 적절히 활용하고, 필요할 경우 clearerr로 상태를 초기화하여 다음 작업에 지장이 없도록 하세요.