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 사용 시 주의할 점

  1. 파일 읽기 후 확인: feof는 EOF에 도달한 후 호출해야 의미가 있습니다.
  2. 잘못된 루프 조건 피하기: while (!feof(file))와 같은 루프는 피하고 읽기 함수의 반환 값을 사용하세요.
  3. 오류와 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를 사용하여 안정적이고 오류 없는 파일 입출력 코드를 작성하세요.