嗯,EOF
只是 Cstdio.h
头文件中定义的函数返回的值。它实际上是由操作系统返回给所有读取功能的,因此它依赖于系统。当操作系统到达文件末尾时,它会将其发送到函数,该函数在其返回值中最常见的是 ( -1
),但并非总是如此。因此,总而言之,EOF
不是字符,而是操作系统返回的常量。编辑:嗯,你需要更多地了解文件系统,看看这个。
你好,关于你的第二个问题:
再一次,您应该更好地查看filesystems
. FAT 是一个很好的例子,因为你可以找到很多关于它的文章,它的原理与 NTFS 非常相似。无论如何,再一次,EOF 是NOT a character
. 您不能将其直接放入文件中。如果你能这样做,想象一下后果,即使是“愚蠢”的图像文件也无法被系统读取。
为什么?因为操作系统就像非常复杂的层结构一样工作。其中一层是文件系统驱动程序。它确保它从驱动程序已知的每个文件系统传输数据。它在应用程序和将文件存储到 HDD 的实际系统之间架起了一座桥梁。
确切地说,FAT 文件系统使用所谓的 FAT 表——它是一个靠近 HDD(或分区)地址空间开始的表,它包含所有簇(小存储单元)的映射。好的,所以现在,当您想将一些文件保存到硬盘时,操作系统(文件系统驱动程序)会查看 FAT 表,并搜索值“0x0”。这个“0x0”值向操作系统表明,由该值在 FAT 表中的位置描述的哪个地址可以自由写入。
所以它将文件的第一部分写入其中。然后,它在 FAT 中查找另一个“0x0”值,如果找到,它将文件的第二部分写入它指向的簇中。然后,它将文件所在的第一个 FAT 表记录的值更改为下一个(在我们的例子中是文件的第二部分)的物理地址。
当您的文件全部存储在硬盘上时,现在是最后一部分,它写入所需的 EOF 值,但写入 FAT 表,而不是硬盘的“数据部分”。所以当下次读取文件时,它就知道这是结束了,不要再看下去了。
所以,现在你明白了,如果你想手动将 EOF 值写入它不属于的地方,你必须编写自己的驱动程序来重写 FAT 记录,但这实际上是不可能的初学者。