В вычислительной технике конец файла ( 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 дюйма ленты, за которым следовал один байт, содержащий символ 0x13
(шестнадцатеричный) для девятидорожечных лент и 017
(восьмеричный) для семидорожечных лент . [5] Конец ленты , обычно сокращенно обозначаемый как EOT , обозначался двумя метками ленты. Этот стандарт использовался, например, на IBM 360. Отражающая полоса , которая использовалась для объявления приближающегося физического конца ленты, также называлась маркером EOT .