Loading

什么是EOF

EOF是什么?

EOF (end of file) 表示文件对象的结束,该文件可以是普通文件、二进制文件、甚至是标准输入等

在C语言的标准库函数中有关于 EOF 的定义如下,他是一个宏常量其值为 -1

# file: stdio.h

#define	EOF	(-1)  // 关于 EOF 的定义

上文讲过它是一个值为-1 的宏。不是文件中的某个字符,也不是文件内容的结束字符,更不是文件中的某个二进制片段。

他是在操作系统读取文件结束时返回的一个信号。通常情况下为 负值(-1)

OS如何判断文件读取结束

那么问题来了,操作系统是如何判断文件读取结束的呢? Linux操作系统中文件的元信息中st_size属性记录了文件的大小。每次读取都会根据长度来判断文件是否完成读取。而当读取的长度大于剩余长度时,系统会返回 EOF。因此EOF跟文件的具体内容没有任何关系。

查看文件的元信息

[clarkmonkey]$ stat test.txt
# 下面是 test.txt 文件的元信息, Size 表示文件的大小
  File: "test.txt"
  Size: 7               Blocks: 8                IO Block: 4096
Device: fd01h/64769d    Inode: 29886876          Links: 1
Access: (0644/-rw-r--r--)    Uid: (0/      root)    Gid: (0/     root)
Access: 2019-09-06 19:52:48.000000000 +0800
Modify: 2019-09-06 19:52:48.000000000 +0800
Change: 2019-09-06 19:52:48.000000000 +0800
posted @ 2021-09-08 10:37  ClarkMonkey  阅读(516)  评论(0)    收藏  举报