EOF(End of File)란 무엇인가?

오늘은 EOF에 대해서 알아볼 예정입니다.

EOF는 End of File의 약자로 파일의 끝 또는 종료를 나타냅니다.

프로그래밍에서 파일 입출력을 처리할 때, 파일의 끝에 도달했음을 알리는 신호로 사용됩니다. 즉, EOF는 파일 스트림에서 더 이상 읽을 데이터가 없음을 의미합니다.

c++에서는 다음과 같은 방법으로 EOF를 확인할 수 있습니다.

1. std::ifstream::eof()

‘std::ifstream’ 클래스의 eof() 멤버 함수를 사용하여 파일 끝에 도달했는지 확인할 수 있습니다.

fstream, 파일 스트림은 기본적인 istream이나 ostream 클래스보다 지원하는 기능이 더 많기 때문에 이를 상속 받아서 작성되었으며, 각각을 상속 받은 것이 ifstream과 ofstream입니다. 이들 클래스를 모두 포함하는 라이브러리로 fstream을 사용하면 됩니다.

‘std::ifstream.eof()’는 파일의 끝에 도달하면 ‘true’를 반환합니다.

2. std::cin.eof()

std::cin.eof()는 eofbit를 검사해서 마지막 입력값에 도달하는 경우 ‘true’를, 그렇지 않으면 ‘false’를 반환합니다.

3. std::istream::operator bool 사용

파일 스트림은 조건문에서 사용할 수 있도록 변환 연산자를 제공합니다.

이를 통해 파일 끝에 도달했는지 쉽게 확인할 수 있습니다.

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream file("example.txt");
    if (!file.is_open()) {
        std::cerr << "파일을 열 수 없습니다." << std::endl;
        return 1;
    }

    std::string line;
    while (std::getline(file, line)) {
        std::cout << line << std::endl;
    }

    if (!file) { // 파일 스트림의 상태를 확인
        if (file.eof()) {
            std::cout << "파일 끝에 도달했습니다." << std::endl;
        } else {
            std::cout << "파일을 읽는 중에 오류가 발생했습니다." << std::endl;
        }
    }

    file.close();
    return 0;
}

여기서 !file은 파일 스트림에 오류가 있는지 확인하기 위한 조건문입니다. 오류가 있으면 ‘true’가 됩니다.

이때 파일 끝에 도달한 경우(EOF인 경우)도 포함됩니다. 따라서 EOF인 경우에는 파일 끝에 도달했다는 결과를 출력합니다.

Reference

https://heestory0324.tistory.com/10

https://velog.io/@c-jeongyyun/CPP-EOF-%ED%8C%90%EB%8B%A8%ED%95%98%EA%B8%B0