Standard C
C 언어 feof 사용법 완벽 가이드
레퍼러
2025. 2. 22. 13:40
feof 함수는 C 언어에서 파일 스트림의 끝(EOF: End of File)에 도달했는지 여부를 확인하는 데 사용됩니다. 파일을 읽을 때 루프 조건이나 오류 처리를 위해 자주 사용됩니다.
1. feof 함수 기본 문법
#include <stdio.h>
int feof(FILE *stream);
매개변수 설명:
- stream: EOF 상태를 확인할 파일 포인터입니다.
반환 값:
- 0: 파일 끝에 도달하지 않은 경우
- 0이 아닌 값: 파일 끝에 도달한 경우
2. feof 사용 목적
- 파일 읽기 루프에서 EOF 상태 확인
- 파일 끝 도달 여부에 따른 조건 처리
- 잘못된 EOF 사용으로 인한 무한 루프 방지
3. 기본 사용 예제
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
char ch;
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
if (feof(file)) {
printf("\\n파일 끝에 도달했습니다.\\n");
} else {
printf("\\n파일 읽기 중 오류가 발생했습니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
(파일의 내용)
파일 끝에 도달했습니다.
4. 실전 활용 예제
4.1. 파일 읽기 루프에서 안전한 EOF 확인
#include <stdio.h>
int main() {
FILE *file = fopen("data.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
char buffer[100];
while (fgets(buffer, sizeof(buffer), file) != NULL) {
printf("%s", buffer);
}
if (feof(file)) {
printf("\\n정상적으로 파일 끝에 도달했습니다.\\n");
} else {
printf("\\n파일 읽기 중 오류가 발생했습니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
(파일의 내용)
정상적으로 파일 끝에 도달했습니다.
4.2. EOF 플래그 초기화 후 재읽기
#include <stdio.h>
int main() {
FILE *file = fopen("sample.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
while (fgetc(file) != EOF) {}
if (feof(file)) {
printf("EOF 플래그 초기화 후 재읽기 시작\\n");
clearerr(file);
rewind(file);
char ch;
while ((ch = fgetc(file)) != EOF) {
putchar(ch);
}
}
fclose(file);
return 0;
}
출력 결과:
EOF 플래그 초기화 후 재읽기 시작
(파일의 내용)
5. feof 사용 시 주의할 점
- 파일 읽기 후 확인: feof는 EOF에 도달한 후 호출해야 의미가 있습니다.
- 잘못된 루프 조건 피하기: while (!feof(file))와 같은 루프는 피하고 읽기 함수의 반환 값을 사용하세요.
- 오류와 EOF 구분: ferror 함수를 사용하여 파일 읽기 중 발생한 오류를 구분할 수 있습니다.
6. 오류 처리 예제
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (!file) {
perror("파일 열기 실패");
return 1;
}
if (feof(file)) {
printf("파일이 비어 있거나 EOF 상태입니다.\\n");
}
fclose(file);
return 0;
}
출력 결과:
파일 열기 실패: No such file or directory
7. 결론
feof 함수는 파일의 끝을 확인하여 읽기 루프를 제어하고 오류를 방지하는 데 중요한 역할을 합니다. 파일 읽기 후 적절하게 feof를 사용하여 안정적이고 오류 없는 파일 입출력 코드를 작성하세요.