Программистские заметки
April 30, 2021

End of file (EOF)

Сегодня расскажу об одной загадочной штуке под названием EOF. "Спецсимвол в конце файла!" - воскликнет юный падаван будет не прав. Разберемся, что за мазафака такая.

EOF - это особая ситуация! Которая может быть проверена с помощью средств стандартных библиотек любого языка программирования. Не существует никого особого символа на манер символа new line "\n".

Чтобы убедиться в этом достаточно вспомнить, что в Unix системах, терминал умеет имитировать ситуацию EOF с помощью сочетания клавиш Ctrl-D, которая прерывает поток ввода более гуманным способом, чем SIGINT.

Ситуация "End of file" это набор признаков, при которых можно сделать вывод что файл закончился. Если пойти "в лоб" и попытаться читать файл посимвольно, в надежде, что цикл прекратится на последнем символе - то можно обратить внимание, что кол-во прочитанных символов будет больше, чем мы ожидаем. При при отсутствии проверки на EOF, последним символом окажется - 0. В этот момент цикл упирается в конец файла и зависает, без передачи управления дальнейшим инструкциям.

В каком нибудь питоне этот процесс так глубоко спрятан под капот функций чтения из файла, что коренные питонисты, не выходившие за пределы уютных py файлов даже не в курсах, че это ваще.

Читаем файл из Python:

with open('somefile') as openfileobject:
    for line in openfileobject:
        do_something()

че вообще? какой EOF. Закончились строки - вышел из цикла.

В то же время Си-шнику стоит быть начеку:

while ((ch != '\n') && (ch != EOF)) {
// read the next ch
}

Внимательный юзер заметит что char проверяется на EOF, аналогично \n, будто это символ такой. Как же так? Дело в том что char - беззнаковое число. В случае, если достигнут конец файла EOF вернет -1.

Способ проверки концовки файла в разных языках разный. Вот такая загогулина.