Eof что это
Перейти к содержимому

Eof что это

Eof что это

EOF (аббревиатура англ.  end of file  — конец файла) в компьютерной терминологии является индикатором операционной системы означающим, что данные в источнике закончились. Источниками данных обычно являются файлы и потоки.

В стандартной библиотеке Си функции ввода/вывода, в частности доступа к файлам, могут возвращать значение, равное символьной константе (точнее макроопределению) EOF для индикации, что достигнут конец файла. Реальное значение EOF является отрицательным числом, зависящим от системы (в основном −1), что гарантирует несовпадение с кодом символа.

Макрос определён в stdio.h.

Для указания терминалу в UNIX «EOF» следует воспользоваться комбинацией клавиш Ctrl+D. В Windows — Ctrl+Z.

Ссылки

  • stdio.h  — основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group   (англ.)
  • Стандартная библиотека Си
  • Ввод/Вывод
  • Файлы

Wikimedia Foundation . 2010 .

Полезное

Смотреть что такое «EOF» в других словарях:

EOF — Saltar a navegación, búsqueda EOF (abreviatura de end of file, fin de fichero en inglés) es un indicador o marca de que no hay más información que recuperar de una fuente de datos. La fuente de datos puede ser un fichero o un flujo de datos… … Wikipedia Español

EOF — may refer to:* End of file, the computing term for the end of file character or signal * Empirical orthogonal functions, a statistical technique for simplifying a dataset * Enterprise Objects Framework, a product from Apple Computer * End of… … Wikipedia

EOF — [Abk. für End of File, dt. Dateiende], Dateiendezeichen … Universal-Lexikon

EOF — (End Of File) special character which signifies the end of a file (Computers) … English contemporary dictionary

Eof — For the computing term, see end of file. Eof (also Eoves) was a swineherd who claimed to have seen a vision of the Virgin Mary at Evesham in England, about 701. [CathEncy|id=05648a|title=Evesham Abbey] Eof related this vision to Egwin, Bishop of… … Wikipedia

EOF — Cette page d’homonymie répertorie les différents sujets et articles partageant un même nom.   Sigles d’une seule lettre   Sigles de deux lettres > Sigles de trois lettres   Sigles de quatre lettres … Wikipédia en Français

Eof — Pour les articles homonymes, voir EOF. Eof, ou Eoves, est un gardien de troupeau qui affirme avoir eu une apparition mariale à Evesham, en Angleterre, aux environs de 701. Il raconta cette vision à Egwin, évêque de Worcester, qui fonda l abbaye d … Wikipédia en Français

EOF — Die Abkürzung EOF steht für: End of File, das Ende einer Datei im Computersprachgebrauch Enterprise Objects Framework von Apple Computer Elektroosmotischer Fluss in der Elektrophorese Empirische Orthogonalfunktion Diese S … Deutsch Wikipedia

EOF — Computers. end of file: a code, marker, or signal used to indicate the end of a file of data. * * * EOF UK US computing end of file Thesaurus: abbreviations used in computing and on the internethyponym … Useful english dictionary

EOF — Computers. end of file: a code, marker, or signal used to indicate the end of a file of data. * * * … Universalium

Eof что это

Проверяет конец файла (EOF).

Синтаксис

Параметры

демо
Дескриптор файла, ссылающийся на открытый файл.

Возвращаемое значение

_eof возвращает значение 1, если текущая точка — конец файла, или значение 0, если это не так. Возвращаемое значение, равное-1, указывает на ошибку; в этом случае вызывается обработчик недопустимых параметров, как описано в разделе Проверка параметров. Если выполнение может быть продолжено , для параметра значение EBADFустанавливается значение, указывающее на недопустимый дескриптор файла.

Remarks

Функция _eof определяет, был ли достигнут конец файла, связанного с демоном .

По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это, см. раздел глобальное состояние в CRT.

Что такое EOF и как его вызвать?

Когда я собираю его в Ubuntu, он начинает получать символы, но я не знаю, как завершить программу, так как он не заканчивается вводом ENTER или возврата каретки.

Что означает EOF? Как я могу вызвать это?

Этот источник также есть в книге Денниса Ритчи:

3 ответа

Tl; др

Как правило, вы можете «запустить EOF» в программе, работающей в терминале с помощью нажатия клавиш CTRL + D сразу после последнего сброса ввода.

Что означает EOF? Как я могу вызвать это?

EOF означает конец файла.

«Запуск EOF» в этом случае примерно означает «информирование программы о том, что ввод больше не будет отправлен».

В этом случае, так как getchar() вернет отрицательное число, если ни один символ не прочитан, выполнение прекращается.

Но это относится не только к вашей конкретной программе, это относится ко многим различным инструментам.

В общем, «запуск EOF» может быть выполнен нажатием комбинации клавиш CTRL + D сразу после последнего сброса ввода (т. Е. Путем отправки пустого ввода).

Когда вы нажимаете CTRL + D, то происходит то, что ввод, введенный с момента последнего сброса ввода, сбрасывается; когда это случается пустой вход read() системный вызов вызван возвратом STDIN программы 0 , getchar() возвращает отрицательное число ( -1 в библиотеке GNU C), и это, в свою очередь, интерпретируется как EOF 1 .

TL; DR: EOF — это не символ, это макрос, используемый для оценки отрицательного возврата функции чтения ввода. Для отправки можно использовать Ctrl + D EOT символ, который заставит функцию вернуться -1

Каждый программист должен RTFM

Давайте обратимся к «Справочному руководству C A» Harbison and Steele, 4-е изд. с 1995 г., стр. 317:

Отрицательное целое число EOF — это значение, которое не является кодировкой «реального символа» . Например, fget (раздел 15.6) возвращает EOF в конце файла, потому что нет «реального символа» для чтения.

по существу EOF не символ, а целочисленное значение, реализованное в stdio.h представлять -1 , Таким образом, ответ Коса является правильным, но речь идет не о получении «пустого» ввода. Важно отметить, что здесь EOF служит возвращаемым значением (из getchar() ) сравнение, а не для обозначения фактического характера. man getchar поддерживает это:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

fgetc(), getc() и getchar() возвращают символ, прочитанный как символ без знака, приведенный к типу int или EOF в конце файла или ошибки.

get () и fgets() возвращают s в случае успеха и NULL в случае ошибки или когда происходит конец файла, когда символы не были прочитаны.

ungetc () возвращает c в случае успеха или EOF в случае ошибки.

Рассмотрим while цикл — его основная цель — повторить действие, если условие в скобках верно. Посмотри снова:

Это в основном говорит продолжать делать вещи, если c = getchar() возвращает успешный код ( 0 или выше; кстати, это обычное дело, попробуйте запустить успешную команду, затем echo $? а потом не удалось echo $? и увидеть числа, которые они возвращают). Поэтому, если мы успешно получим символ и добавим C, возвращенный код состояния будет равен 0, а ошибка — -1. EOF определяется как -1 , Поэтому, когда условие -1 == -1 происходит, петли прекращаются. И когда это произойдет? Когда нет больше персонажа, чтобы получить, когда c = getchar() выходит из строя. Вы могли бы написать while ((c = getchar ()) != -1) и все равно будет работать

Кроме того, давайте вернемся к фактическому коду, вот выдержка из stdio.h

Коды ASCII и EOT

Хотя символ EOF не является действительным символом, существует EOT Символ (конец передачи), который имеет десятичное значение ASCII 04; он связан с сочетанием клавиш Ctrl + D (представлен также как метасимвол ^D ). Характер окончания передачи использовался для обозначения закрытия потока данных в обратном направлении, когда компьютеры использовались для управления телефонными соединениями, отсюда и название «конец передачи» .

Таким образом, можно отправить это значение ascii в программу следующим образом: $’\04′ что такое EOT:

Таким образом, мы можем сказать, что он существует, но это не для печати

Примечание

Мы часто забываем, что в прошлом компьютеры не были такими универсальными — дизайнеры должны использовать каждую доступную клавиатуру. Таким образом, отправка EOT символ с CtrlD по-прежнему «отправляет символ», в отличие от ввода заглавной буквы A, ShiftA, вы все равно заставляете компьютер вводить данные с помощью доступных клавиш. Таким образом, EOT — это реальный символ в том смысле, что он исходит от пользователя, он читается компьютером (хотя не для печати, не виден людьми), он существует в компьютерной памяти

Комментарий Byte Commander

Если вы попытаетесь прочитать из /dev/null, это также должно вернуть EOF, верно? Или что я получу там?

Да, совершенно верно, потому что в /dev/null нет фактического символа для чтения, следовательно, он c = getchar() вернусь -1 код, и программа выйдет сразу. Снова команда не возвращает EOF. EOF — это просто постоянная переменная, равная -1, которую мы используем для сравнения кода возврата функции getchar. EOF не существует как символ, это просто статическое значение внутри stdio.h ,

Еще один гвоздь в гробу

Иногда пытаются доказать, что EOF — это символ с кодом, подобным этому:

Проблема в том, что тип данных char может иметь значение со знаком или без знака. Кроме того, они являются наименьшим адресуемым типом данных, что делает их очень полезными в микроконтроллерах, где память ограничена. Так что вместо того, чтобы объявить int foo = 25; это часто встречается в микроконтроллерах с небольшой памятью char foo = 25; или что-то подобное. Кроме того, символы могут быть подписаны или не подписаны.

Можно проверить, что размер в байтах с программой, как это:

Какой именно смысл? Дело в том, что EOF определяется как -1, но тип данных char может печатать целочисленные значения.

ХОРОШО. то, что если мы попытаемся напечатать char как строку?

Очевидно, ошибка, но, тем не менее, ошибка скажет нам кое-что интересное:

skolodya @ ubuntu: $ gcc EOF.c -o EOF
EOF.c: В функции ‘main’: EOF.c:4:5: warning: format ‘%s’ ожидает аргумент типа ‘char *’, но аргумент 2 имеет тип ‘int’ [-Wformat=] printf(«%s», EOF);

Шестнадцатеричные значения

Печать EOF в виде шестнадцатеричного значения дает FFFFFFFF , 16-битное (8-байтовое) значение, два комплимента -1 ,

Еще одна любопытная вещь происходит со следующим кодом:

Если нажать Shift + A , мы получим шестнадцатеричное значение 41, очевидно такое же, как в таблице ASCII. Но для Ctrl + D мы имеем ffffffff опять же — возвращаемое значение getchar() Хранится в c ,

Обратитесь к другим языкам

Обратите внимание, что другие языки избегают этой путаницы, потому что они работают с оценкой состояния выхода из функции, а не сравнивают ее с макросом. Как читать файл в Java?

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *