В вычислении , истекшим файла ( EOF ) [1] является одним из условий в компьютерной операционной системы , где нет больше данных не может быть считан из источника данных. Источник данных обычно называется файлом или потоком .
Подробности [ править ]
В стандартной библиотеке C функции чтения символов, такие как getchar, возвращают значение, равное символическому значению (макросу), EOF
чтобы указать, что произошло условие конца файла. Фактическое значение EOF
зависит от реализации (но обычно равно -1, например, в glibc [2] ) и отличается от всех допустимых кодов символов. Функции чтения блока возвращают количество прочитанных байтов, и если оно меньше запрошенного, то был достигнут конец файла или произошла ошибка (проверка errno
или выделенная функция, например, ferror
часто требуется для определения какой).
Символ EOF [ править ]
Этот раздел в значительной степени или полностью основан на одном источнике . ( март 2015 г. ) |
Ввод с терминала на самом деле никогда не «заканчивается» (если устройство не отключено), но полезно ввести более одного «файла» в терминал, поэтому последовательность клавиш зарезервирована для обозначения конца ввода. В 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 в конец при записи текстового файла. Это было сделано по двум причинам:
- Обратная совместимость с CP / M . Файловая система CP / M записывала длины файлов, кратные 128-байтовым «записям», поэтому по соглашению для обозначения конца значимых данных, если они заканчивались в середине записи, использовался символ Control-Z. Файловая система MS-DOS всегда записывается точными байты длиной файлов, так что это никогда не было необходимости в MS-DOS.
- Это позволяет программам использовать один и тот же код для чтения ввода как из терминала, так и из текстового файла.
В стандарте магнитной ленты ANSI X3.27-1969 конец файла обозначался меткой ленты , которая состояла из промежутка примерно в 3,5 дюйма ленты, за которым следует один байт, содержащий символ 13 (шестнадцатеричный) для девяти дорожек. кассет и 17 (восьмеричных) для семидорожечных лент . [3] с истекшим ленты , сокращенно СРВ , было указано на две ленты марок. Это был стандарт, используемый, например, в IBM 360 . Светоотражающие полосы , которая использовалась , чтобы объявить о надвигающемся физическом конце ленты также называется СРВОМ маркером.
См. Также [ править ]
- Символ конца передачи
- Замещающий персонаж
- Конец сообщения
- Здесь документ
- -30-
Ссылки [ править ]
- ^ Уэйн Поллок. «Обзор документа Shell Here» . hccfl.edu. Архивировано из оригинала на 2014-05-29 . Проверено 28 мая 2014 .
- ^ "Библиотека GNU C" . www.gnu.org .
- ^ «Перенос ленты (до 1977 г.): носители обмена: спецификации MARC 21 для структуры записи, наборов символов и носителей обмена (Библиотека Конгресса)» . www.loc.gov .