Конец файла
В вычислениях файла конец ( EOF ) [1] это состояние в операционной системе компьютера , при котором больше невозможно прочитать данные из источника данных. Источник данных обычно называется файлом или потоком .
Подробности [ править ]
В стандартной библиотеке C функции чтения символов, такие как getchar, возвращают значение, равное символьному значению (макросу). EOF
чтобы указать, что произошло условие конца файла. Фактическая стоимость EOF
зависит от реализации и должно быть отрицательным (но обычно равно -1, например, в glibc [2] ). Функции чтения блоков возвращают количество прочитанных байт, и если оно меньше запрошенного, то достигнут конец файла или произошла ошибка (проверка errno
или специальную функцию, например ferror
требуется определить, какой именно).
Символ EOF [ править ]
Ввод с терминала никогда на самом деле не «заканчивается» (если только устройство не отключено), но полезно вводить в терминал более одного «файла», поэтому последовательность клавиш зарезервирована для обозначения окончания ввода. В UNIX перевод нажатия клавиши в EOF выполняется драйвером терминала, поэтому программе не нужно отличать терминалы от других входных файлов. По умолчанию драйвер преобразует символ Control-D в начале строки в индикатор конца файла. Чтобы вставить во входной поток фактический символ Control-D (ASCII 04), пользователь предваряет его командным символом «кавычки» (обычно Control-V ). AmigaDOS аналогична, но использует Control-\ вместо Control-D.
В DOS и Windows (а также в CP/M и многих операционных системах DEC , таких как монитор PDP-6) , [3] РТ-11 , ВМС или ТОПС-10 [4] ), чтение с терминала никогда не приведет к получению EOF. Вместо этого программы распознают, что источником является терминал (или другое «символьное устройство»), и интерпретируют данный зарезервированный символ или последовательность как индикатор конца файла; чаще всего это ASCII Control-Z , код 26. Некоторые программы MS-DOS, включая части оболочки Microsoft MS-DOS ( COMMAND.COM ) и служебные программы операционной системы (такие как EDLIN ), обрабатывают Control-Z в текстовом файле как отметка конца значимых данных и/или добавьте Control-Z в конец при записи текстового файла. Это было сделано по двум причинам:
- Обратная совместимость с CP/M . CP/M Файловая система (а также исходная 8-битная FAT, реализованная в Microsoft BASIC ) записывала только длину файлов, кратную 128-байтовым «записям», поэтому по соглашению для обозначения конца использовался символ Control-Z. значимых данных, если они заканчивались в середине записи. Файловая система FAT12 , представленная в 86-DOS и MS-DOS, всегда записывала точную длину файлов в байтах, поэтому в DOS в этом никогда не было необходимости.
- Это позволяет программам использовать один и тот же код для чтения входных данных как с терминала, так и из текстового файла.
ANSI X3.27-1969 В стандарте магнитной ленты конец файла обозначался меткой ленты , которая состояла из промежутка ленты длиной примерно 3,5 дюйма, за которым следовал одиночный байт, содержащий символ 13 (шестнадцатеричный) для девятидорожечной ленты. лент и 17 (восьмеричное) для семидорожечных лент . [5] Конец ленты , обычно сокращенно EOT , обозначался двумя метками на ленте. Именно такой стандарт использовался, например, в IBM 360 . Светоотражающая полоса , которая использовалась для объявления о приближающемся физическом окончании ленты, также называлась маркером EOT .
См. также [ править ]
Ссылки [ править ]
- ^ Поллок, Уэйн. «Обзор документа Shell Here» . hccfl.edu. Архивировано из оригинала 29 мая 2014 г. Проверено 28 мая 2014 г.
- ^ «Библиотека GNU C» . www.gnu.org .
- ^ «Таблица характеристик устройств ввода-вывода — консоль или телетайп». Руководство по системе мультипрограммирования PDP-6 (PDF) . Мейнард, Массачусетс, США: Корпорация цифрового оборудования (DEC). 1965. с. 43. DEC-6-0-EX-SYS-UM-IP-PRE00. Архивировано (PDF) из оригинала 14 июля 2014 г. Проверено 10 июля 2014 г. (1+84+10 страниц)
- ^ «5.1.1.1. Функции, зависящие от устройства — Режимы данных — Полнодуплексное программное обеспечение A (ASCII) и AL (строка ASCII)». Справочное руководство PDP-10: Связь с монитором — Мониторы с разделением времени (PDF) . Том. 3. Корпорация цифрового оборудования (DEC). 1969. С. 5-3 – 5-6 [5-5 (431)]. Архивировано (PDF) из оригинала 15 ноября 2011 г. Проверено 10 июля 2014 г. (207 страниц)
- ^ «Передача на ленте (до 1977 г.): Носители обмена: Спецификации MARC 21 для структуры записей, наборов символов и носителей обмена (Библиотека Конгресса)» . www.loc.gov .