1. 预备知识
共识原理:
文件 = 内容 + 属性
文件分为 打开的文件 和 没打开的文件
文件要想被打开,必须先被加载到内存中。文件内容、文件属性都要加载进去,
因为CPU只和内存打交道
文件的内容加不加载,取决于是否对文件做读取修改,理想情况二者都要加载
进程 : 打开的文件 = 1 : n
对于打开的文件:它由谁打开?是进程 !所以本质上,是在研究进程和文件的关系。
没打开的文件在哪里存放?在磁盘上。
我们最关注什么问题?没有被打开的文件非常多,文件如何被分门别类地放置好,如何存储? 我们要能快速地进行增删查改,快速地找到文件
所以,在操作系统内部,一定存在大量的被打开的文件。
OS要不要管理这些被打开的文件呢?怎么管理? 先描述,再组织。
在内核中,一个被打开的文件,都必须有自己的文件打开对象,其中包含文件的很多属性。
如:struct XXX { 文件属性;struct XXX* next } ;
对文件的管理,就转换成了对链表的增删改查。
一个进程启动后,会默认打开三个输入、输出流,三个输入输出流,最终是以文件的形式打开的。
对应到C语言中,一个程序会打开stdin、stdout、stderr 三个流成员,类型是FlLE*。
Linux下一切皆文件,所以一个进程默认就打开了三个文件。