EOF是否真实存在?

5

当我在PHP中使用文件函数时,我会检查EOF。我想知道EOF是否实际存在于文件中。当我创建一个空的文本文件时,它显示为0KB。那么在一个0KB的文件中,EOF是如何存在的呢?

3个回答

11

在ASCII字符集中,有一个文件结束控制字符(CTRL+Z 或 26 或 0x1A),但自80年代发布的操作系统以来,它实际上已不再需要用于标记文件的结尾。所有现代操作系统都将文件大小作为元数据存储在目录结构中(确切的格式取决于文件系统)。高级文件访问函数会检查文件大小,以便决定何时向程序员指示EOF。

如果在数据中存在EOF,并且您开启了文本模式转换(在大多数语言中,这是控制NL <-> CRLF转换的相同设置),则文件访问可能会在遇到该EOF字符时停止。在二进制模式下,读取将一直持续到达到文件大小。


2
对,其他操作系统使用文件分隔符(28)等。这正是我们应该高兴的另一个原因,使用字符标记文件结尾已经过时了。 - Ben Voigt
1
^D在Unix上不是EOF。相反,在Unix上的终端设备允许您定义一个控制字符,当按下时会在设备上生成EOF条件,默认为^D。但这并不意味着^D的ASCII字节会出现在终端数据流中... - R.. GitHub STOP HELPING ICE
“hasn't actually been needed” 哦?那管道呢? - Benubird

1
在现代文件系统中,磁盘上实际上没有EOF字符。一些文件读取函数通过返回4字节值而不是1字节值来实现它,但大多数函数并不使用这个概念。

0

它并不存在,但文件大小存在,这就是你知道 EOF 位置的方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接