Распространенное заблуждение: файлы имеют EOF char в конце

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

 Some programmer dude28 мар. 2012 г., 15:10
@MrLister я знаю, в Windows чтение из текстовых файлов проверяетCTRL-Z (т.е. байт0x1a) как специальный символ конца файла. Не делает этореальный конец файла.
 Mr Lister28 мар. 2012 г., 14:40
@JoachimPileborg Просто для удовольствия, вы должны создать текстовый файл с \ x1A в середине, а затемtype это из командной строки.
 Mr Lister28 мар. 2012 г., 14:34
Путаница может заключаться в том, что EOF сам по себе является просто сокращением от «End Of File», и поэтому может означать много вещей: символ ASCII 0x1A, условие, когда средство чтения открытых файлов достигло конца, функцияeof() или его результат, не символьная константаEOF и т.п.
 Mr Lister28 мар. 2012 г., 15:17
@JoachimPileborg Нет, но я боюсь, что это большая часть путаницы. ВыМожно иметь символ EOF, который хранится в файле и который помечает EOF, даже если его имя ASCII не "EOF"!
 Some programmer dude28 мар. 2012 г., 14:27
Все файлы имеют размер. Если вы читаете от первого байта до последнего (как указано размером файла), вы достигли конца файла. Нет спецхарактер отмечает конец файла (подумайте о попытке чтения двоичных данных, как будет отличаться байт конца файла от любого другого байта?).

Ответы на вопрос(5)

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

Решение Вопроса

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

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

тся ОС, когда больше нет данных для чтения или произошла ошибка ввода. Так что, как только вы достигнете конца файла, выдолжен нажмите EOF.

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

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

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

 Rsh28 мар. 2012 г., 17:19
Очень полезная ссылка
 Mr Lister28 мар. 2012 г., 14:43
Это только говорит мне, что эти люди не знают о ^ Z.

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

 Wildcard23 нояб. 2016 г., 06:36
Это самый поучительный ответ ИМО.

Ваш ответ на вопрос