什么是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

浙公网安备 33010602011771号