В вычислениях конец файла ( EOF ) [1] — это состояние в операционной системе компьютера , при котором больше невозможно прочитать данные из источника данных. Источник данных обычно называется файлом или потоком .
В стандартной библиотеке C функции чтения символов, такие как getchar , возвращают значение, равное символьному значению (макросу) EOF
, чтобы указать, что произошло условие конца файла. Фактическое значение EOF
зависит от реализации и должно быть отрицательным (но обычно равно -1, например, в glibc [2] ). Функции чтения блоков возвращают количество прочитанных байтов, и если оно меньше запрошенного, то был достигнут конец файла или произошла ошибка (для определения какой требуется проверка errno
или выделенная функция, например ).ferror
Ввод с терминала никогда на самом деле не «заканчивается» (если только устройство не отключено), но полезно вводить в терминал более одного «файла», поэтому последовательность клавиш зарезервирована для обозначения окончания ввода. В UNIX перевод нажатия клавиши в EOF выполняется драйвером терминала, поэтому программе не нужно отличать терминалы от других входных файлов. По умолчанию драйвер преобразует символ Control-D в начале строки в индикатор конца файла. Чтобы вставить фактический символ Control-D (ASCII 04) во входной поток, пользователь предваряет его командным символом «кавычки» (обычно Control-V ). AmigaDOS аналогична, но использует Control-\ вместо Control-D.
В DOS и Windows (а также в CP/M и многих операционных системах DEC , таких как монитор PDP-6 , [3] RT-11 , VMS или TOPS-10 [4] ) чтение с терминала никогда не приведет к созданию 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 (восьмеричное) для семидорожечных лент . [5] Конец ленты , обычно сокращенно EOT , обозначался двумя метками на ленте. Такой стандарт использовался, например, на IBM 360 . Светоотражающая полоса , которая использовалась для объявления о приближающемся физическом окончании ленты, также называлась маркером EOT .