파일 끝

정의

파일 끝(End‑Of‑File, EOF) 은 컴퓨터 파일 시스템에서 파일의 내용이 더 이상 존재하지 않음을 나타내는 논리적 개념이다. 프로그램이 파일 스트림을 읽는 과정에서 EOF 신호를 감지하면, 파일의 마지막 바이트 이후로 읽을 데이터가 없다는 것을 인식하고 읽기를 종료한다.

주요 특징

항목 내용
표현 방식 파일 포맷마다 다르지만, 일반적으로 파일의 물리적 크기(바이트 수)와 일치한다. 일부 텍스트 파일에서는 EOF 문자(예: Ctrl+Z (0x1A) for DOS)나 특수 마커가 사용될 수 있다.
시스템 호출 Unix/Linux 계열에서는 read() 함수가 0 바이트를 반환하거나, feof() 함수가 true를 반환함으로써 EOF를 나타낸다. Windows에서는 ReadFile()이 FALSE와 GetLastError()ERROR_HANDLE_EOF를 반환한다.
프로그래밍 언어 - C/C++: stdio.hfeof(FILE *stream)
- Python: 파일 객체의 read()가 빈 문자열('')을 반환
- Java: InputStream.read()-1을 반환
예외 처리 파일이 정상적으로 끝났는지 확인하지 않으면 무한 루프나 데이터 손실이 발생할 수 있다. 따라서 EOF 검사는 파일 입출력 로직에서 필수적인 방어 코드이다.

역사

  • 초기 컴퓨팅 : 텍터 파일 시스템이 없던 시절, 파일의 끝을 표시하기 위해 특별한 제어 문자(예: Ctrl+Z)가 사용되었다.
  • UNIX 등장 : 1970년대 초 UNIX는 파일 크기 메타데이터를 파일 시스템에 저장함으로써 물리적 EOF 마커 없이도 파일 끝을 인식하도록 설계하였다. 이는 이후 대부분의 현대 운영체제에서 채택된 방식이다.

활용 예시 (C 언어)

#include <stdio.h>

int main(void) {
    FILE *fp = fopen("data.txt", "r");
    int ch;

    if (!fp) {
        perror("파일 열기 실패");
        return 1;
    }

    while ((ch = fgetc(fp)) != EOF) {   // EOF에 도달할 때까지 한 문자씩 읽음
        putchar(ch);
    }

    if (feof(fp))
        printf("
[EOF 도달]
");
    else if (ferror(fp))
        perror("읽기 오류");

    fclose(fp);
    return 0;
}

관련 용어

  • 스트림(Stream) : 연속적인 데이터 흐름을 추상화한 개념으로, 파일 입출력은 스트림 기반으로 동작한다.
  • 버퍼(Buffer) : 입출력 효율을 높이기 위해 데이터 조각을 임시 저장하는 메모리 영역. EOF 발생 시 버퍼가 비워진다.
  • 시그널(Signal) : 일부 운영체제에서 파일 끝에 도달했을 때 프로세스에 전달되는 이벤트(예: SIGPIPE).

참고 문헌

1. Kernighan, B. W., & Ritchie, D. M. (1988). The C Programming Language (2nd ed.). Prentice Hall.
2. Love, R. (2010). Linux Kernel Development (3rd ed.). Addison‑Wesley.
3. Python Software Foundation. (2024). Python Documentation – Built‑in Functions. https://docs.python.org/3/library/functions.html#open
4. Oracle Corporation. (2023). Java Platform SE Documentation – InputStream. https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html


파일 끝 은 파일 입출력의 기본 개념이자, 다양한 프로그래밍 언어와 운영체제에서 동일하게 적용되는 핵심적인 원칙이다. 이를 정확히 이해하고 적절히 처리하는 것이 안정적인 소프트웨어 개발에 필수적이다.

둘러보기

더 찾아볼 만한 주제