关于EOF和读文件的一些事
到底什么是EOF?这是一个问题。一般而言,EOF字面含义就是文件的结尾-end of file,可是如何去检查是否已经到了结尾呢?文件类型各种各样,不可能在文件的结尾处真实的写一个EOF标志,如果真的这么做,操作系统内核的文件系统设计将会非常复杂,于是这个“检测”文件结尾的工作就交给了用户态,通常来讲就是C库来做这件事。内核仅仅按照顺序的方式向前推进对文件的访问即可,因此对于内核态文件数据结构而言,维护一个pos是重要的,正是这个pos不断向前推进,最终到达文件的尾部,每次读取文件是从pos处开始读取,到了最后pos已经到达了文件尾部,那么再读的话就会返回“读到的长度为0”这个结果,而正是这个结果标示了EOF。因此,用户态的程序在读文件时大体都遵循以下逻辑:
openwhile true read lseek to 0done