Распространенное заблуждение: файлы имеют EOF char в конце - PullRequest
2 голосов
/ 28 марта 2012

Я читал «Язык ассемблера ПК от Картера» и увидел эту фразу в сноске на стр. 32, которая так смутила меня!
Если мы предположим, что файлы могут не иметь EOF в конце (как говорится в книге), это правильное утверждение, то как мы можем выяснить, где находится конец файла?
и также возникает другой вопрос: использует ли fseek EOF для перемещения туда и обратно в файле?

Ответы [ 5 ]

6 голосов
/ 28 марта 2012

ПК => ^ Z: EOF

в старые ПК-дни ctrl-Z был сигналом в файле для EOF.

в UNIX и других современных системах: после чтения за stat.st_size, EOF сигнализируется

5 голосов
/ 28 марта 2012

С http://www.drpaulcarter.com/cs/common-c-errors.php:

Что это за значение?EOF Распространенное заблуждение учащихся заключается в том, что в конце файлов есть специальный символ EOF.В конце файла нет специального символа.EOF - это целочисленный код ошибки, возвращаемый функцией.

2 голосов
/ 28 марта 2012

Ну, EOF не сохраняется в конце файла и не char.EOF - это сообщение об ошибке, которое функции чтения возвращают, когда нет больше данных для чтения.По этой причине getchar возвращает int - он может вернуть char, преобразованный в int, или int EOF (что недопустимо char, поэтому, если вы его получили,может быть уверен, что вы пропустили конец файла).

0 голосов
/ 28 марта 2012

В контексте кода C, EOF - это просто указание на то, что больше нет доступных данных для данного входного потока.Соответствует ли это специальному символу EOF в самом файле, зависит от базового файла или системы ввода-вывода.

0 голосов
/ 28 марта 2012

EOF не сохраняется в файле.EOF (обычно определяемый как -1) возвращается ОС, когда больше нет данных для чтения или произошла ошибка ввода.Поэтому, как только вы достигнете конца файла, вы должны нажать EOF.

Мое предположение об утверждении в вашей книге состоит в том, что оно означало "EOF is not necessarily be at the end of file but also possible to have it somewhere in the middle of a file". Это верно для ожидаемой ошибки ввода.

...