В вычислениях, конец файла (EOF ) - это условие в компьютере операционной системе, где чтение из источника данных больше невозможно. Источник данных обычно называется файл или поток.
В стандартной библиотеке C функции чтения символов, такие как getchar, возвращают значение, равное символическому значению (макросу) EOF
, чтобы указать что произошло условие конца файла. Фактическое значение EOF
зависит от реализации (но обычно равно -1, например, в glibc ) и отличается от всех допустимых кодов символов. Функции блочного чтения возвращают количество прочитанных байтов, и если оно меньше запрошенного, то был достигнут конец файла или произошла ошибка (проверка errno
или выделенная функция, например ferror
часто требуется, чтобы определить какой).
Ввод с терминала на самом деле никогда не «заканчивается» (если только устройство не отключено), но полезно ввести более одного «файла» в терминал, поэтому ключ последовательность зарезервирована для обозначения конца ввода. В UNIX преобразование нажатия клавиши в EOF выполняется драйвером терминала, поэтому программе не нужно отличать терминалы от других входных файлов. По умолчанию драйвер преобразует символ Control-D в начале строки в индикатор конца файла. Чтобы вставить фактический символ Control-D (ASCII 04) во входной поток, пользователь ставит перед ним командный символ «кавычки» (обычно Control-V ). AmigaDOS аналогична, но использует Control- \ вместо Control-D.
В DOS и Windows (а также в CP / M и многих операционных системах DEC, таких как RT-11 или VMS ), чтение с терминала никогда не приведет к EOF. Вместо этого программы распознают, что источник является терминалом (или другим «символьным устройством»), и интерпретируют данный зарезервированный символ или последовательность как индикатор конца файла; чаще всего это ASCII Control-Z, код 26. Некоторые программы MS-DOS, включая части оболочки Microsoft MS-DOS (COMMAND.COM ) и служебные программы операционной системы (такие как EDLIN ), обрабатывают Control-Z в текстовом файле как отметку конца значимых данных и / или добавляют Control-Z в конец при записи текстовый файл. Это было сделано по двум причинам:
В стандарте ANSI X3.27-1969 магнитная лента конец файла обозначался меткой ленты, которая состояла из промежуток примерно 3,5 дюйма ленты, за которым следует один байт, содержащий символ 13 (шестнадцатеричный) для девятидорожечной ленты и 17 (восьмеричный) для семидорожечной ленты. конец ленты, обычно обозначаемый как EOT, был обозначен двумя метками ленты. Этот стандарт использовался, например, в IBM 360. Светоотражающая полоса , которая использовалась для объявления о приближающемся физическом окончании ленты, также называлась маркером EOT .