End of file (EOF)
Сегодня расскажу об одной загадочной штуке под названием EOF. "Спецсимвол в конце файла!" - воскликнет юный падаван будет не прав. Разберемся, что за мазафака такая.
EOF - это особая ситуация! Которая может быть проверена с помощью средств стандартных библиотек любого языка программирования. Не существует никого особого символа на манер символа new line "\n".
Чтобы убедиться в этом достаточно вспомнить, что в Unix системах, терминал умеет имитировать ситуацию EOF с помощью сочетания клавиш Ctrl-D, которая прерывает поток ввода более гуманным способом, чем SIGINT.
Ситуация "End of file" это набор признаков, при которых можно сделать вывод что файл закончился. Если пойти "в лоб" и попытаться читать файл посимвольно, в надежде, что цикл прекратится на последнем символе - то можно обратить внимание, что кол-во прочитанных символов будет больше, чем мы ожидаем. При при отсутствии проверки на EOF, последним символом окажется - 0. В этот момент цикл упирается в конец файла и зависает, без передачи управления дальнейшим инструкциям.
В каком нибудь питоне этот процесс так глубоко спрятан под капот функций чтения из файла, что коренные питонисты, не выходившие за пределы уютных py файлов даже не в курсах, че это ваще.
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.
Способ проверки концовки файла в разных языках разный. Вот такая загогулина.