2012-03-28 81 views
2

我正在读“Carter的PC汇编语言”,我在第32页的脚注中看到了这个短语,这使我很困惑!
如果我们假设文件末尾没有EOF(正如本书所说)是一个正确的语句,那么我们如何确定文件的结尾?
并且它还产生了另一个问题:fseek是否使用EOF在文件中来回移动?常见误解:文件末尾有一个EOF字符

+5

所有文件都有大小。如果你从第一个字节读到最后一个(如文件大小所示),你已经到达文件的末尾。没有特殊的_character_标记文件的结尾(考虑尝试读取二进制数据,文件结束字节与其他任何字节的区别如何?)。 – 2012-03-28 12:27:47

+0

混淆可能是EOF本身只是“文件结束”的简称,因此它可能意味着很多东西:ASCII字符0x1A,打开的文件读取器已达到结尾的条件,函数eof ()'或它的结果,非字符常量'EOF'等。 – 2012-03-28 12:34:49

+0

@JoachimPileborg只是为了好玩,你应该在中间创建一个带有\ x1A的文本文件,然后从命令行键入它。 – 2012-03-28 12:40:01

回答

6

PC =>^Z:EOF

在奥尔德PC-天

的CTRL-Z在对EOF一个文件中的信号。

UNIX和其他现代系统下:阅读stat.st_size落后之后,EOF发出信号

4

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

这是什么价值? EOF对学生常见的误解是 文件末尾有一个特殊的EOF字符。文件末尾不存在特殊的 字符。 EOF是由函数返回的整数错误代码 。

+1

那只告诉我这些人不知道^ Z。 – 2012-03-28 12:43:16

+0

非常有用的链接 – Rsh 2012-03-28 15:19:05

0

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".这对预期的输入错误是正确的。

2

那么,EOF不存储在文件的末尾,而不是charEOF是一条错误消息,读取函数在没有更多数据要读取时返回。这是getchar回报int的原因 - 它可能会返回一个char转化为int,或intEOF(这是无效的char,因此,如果你得到它,你可以肯定,你通过文件的末尾)。

+0

这是IMO最有启发性的答案。 – Wildcard 2016-11-23 05:36:41

0

在C代码的情况下,EOF只是一个表示给定输入流没有更多数据可用的指示。是否与文件中的特殊EOF字符相对应,是底层文件或I/O系统的功能。

相关问题