728x90
반응형
C 언어에서 파일 입출력 중 에러가 발생할 수 있으며, 이러한 에러를 처리하는 기능이 필요합니다. stdio.h
헤더 파일에는 파일 관련 오류를 확인하고 처리할 수 있는 여러 함수가 제공됩니다. 오늘은 perror
, clearerr
, feof
, ferror
함수에 대해 알아보고 예제 코드를 통해 실제 동작을 확인해 보겠습니다.
1. perror
함수
perror
함수는 마지막으로 발생한 시스템 오류 메시지를 출력하는 함수입니다. 파일 처리 과정에서 오류가 발생하면 perror
를 이용해 어떤 오류가 발생했는지 확인할 수 있습니다.
사용법
void perror(const char *s);
s
: 오류 메시지 앞에 출력할 문자열입니다.
예제
#include <stdio.h>
#include <errno.h>
int main() {
FILE *file = fopen("non_existent_file.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
fclose(file);
return 0;
}
실행 결과 (파일이 존재하지 않을 경우)
파일 열기 오류: No such file or directory
2. clearerr
함수
clearerr
함수는 파일 스트림의 오류 및 EOF(End of File) 상태를 초기화하는 함수입니다.
사용법
void clearerr(FILE *stream);
stream
: 오류 상태를 초기화할 파일 포인터입니다.
예제
#include <stdio.h>
int main() {
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
fgetc(file); // 파일 읽기 시도
clearerr(file); // 오류 상태 초기화
if (ferror(file)) {
printf("파일 오류가 있습니다.\n");
} else {
printf("파일 오류가 없습니다.\n");
}
fclose(file);
return 0;
}
실행 결과 (정상적인 파일일 경우)
파일 오류가 없습니다.
3. feof
함수
feof
함수는 파일 스트림의 EOF 상태를 확인하는 함수입니다. 파일을 읽는 도중 EOF에 도달했는지를 확인할 때 사용됩니다.
사용법
int feof(FILE *stream);
stream
: EOF 상태를 확인할 파일 포인터입니다.- 반환값: EOF이면 0이 아닌 값, EOF가 아니면 0을 반환합니다.
예제
#include <stdio.h>
int main() {
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
while (!feof(file)) {
char c = fgetc(file);
if (feof(file)) break;
putchar(c);
}
printf("\n파일 끝에 도달했습니다.\n");
fclose(file);
return 0;
}
실행 결과 (test.txt 내용이 "Hello World"일 경우)
Hello World
파일 끝에 도달했습니다.
4. ferror
함수
ferror
함수는 파일 스트림에서 오류가 발생했는지 확인하는 함수입니다.
사용법
int ferror(FILE *stream);
stream
: 오류 상태를 확인할 파일 포인터입니다.- 반환값: 오류가 발생하면 0이 아닌 값, 오류가 없으면 0을 반환합니다.
예제
#include <stdio.h>
int main() {
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
perror("파일 열기 오류");
return 1;
}
// 파일에서 읽을 내용이 없을 때까지 읽음
while (fgetc(file) != EOF);
// EOF 도달 후 추가로 읽기 시도
fgetc(file);
if (ferror(file)) {
printf("파일 읽기 중 오류 발생!\n");
} else {
printf("파일 읽기 정상 종료\n");
}
fclose(file);
return 0;
}
실행 결과 (파일이 존재하고 정상적으로 읽혔을 경우)
파일 읽기 정상 종료
실행 결과 (파일이 비정상적으로 닫혔을 경우)
파일 읽기 중 오류 발생!
결론
파일 입출력 과정에서 오류가 발생할 가능성이 많습니다. perror
, clearerr
, feof
, ferror
함수를 적절히 사용하면 오류를 감지하고 해결할 수 있습니다. 이를 통해 프로그램의 안정성을 높이고, 예상치 못한 문제를 방지할 수 있습니다.
파일 오류 처리를 철저히 하면 보다 안전한 C 프로그램을 작성할 수 있습니다. 오늘 소개한 함수들을 적극적으로 활용해 보세요!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 언어 `string.h`의 `strcat`과 `strncat` 함수 이해하기 (0) | 2025.02.10 |
---|---|
C 표준 라이브러리 string.h 개요 및 문자열 관련 함수 (strlen, strcpy, strncpy) (0) | 2025.02.09 |
C 언어 파일 포인터와 위치 조정 - fseek, ftell, rewind (0) | 2025.02.07 |
C언어 표준 입출력 (stdio.h) - fprintf와 fscanf 사용법 (0) | 2025.02.06 |
C 언어 표준 API - stdio.h의 파일 입출력 (fopen, fclose, fread, fwrite) (0) | 2025.02.05 |