首页 > 代码库 > APUE学习笔记——3.10文件共享
APUE学习笔记——3.10文件共享
基本概念
内核使用3个数据结构描述一个打开的文件:进程表、文件表、V节点表
首先了解3种数据结构的概念
1 进程表
每一个进程有一个进程表。进程表里是一组打开的文件描述符,如标准输入0,标准输出1,标准错误2...
2 文件表
进程打开一个文件时,内核就为该文件创建一个文件表。
进程表对文件表是 一对多的关系 文件表对文件描述符也是一对多的关系(可能多个文件描述符指向同一文件表)
文件表中包含了文件状态标志、当前偏移量、和V-node pointer表项
文件状态标志如:read, write, append, sync, nonblocking等等
偏移量好理解,就不多解释了(它在write时会变化)
V-node pointer就是指向V-node表的指针
3 V节点表(Linux只有i节点表)
每一个没打开的文件有一个V节点表。V-node table实际上跟进程关系不大,主要跟被打开的文件相关。一个打开的文件只有一个v-node表,所有打开它的进程共用此表
文件表对V节点表示多对一的关系。
V-node表主要是描述了文件信息、数据的访问入口
一个进程打开多个文件
如《APUE E3rd》的Figure3.7所示,一个进程打开多个文件。
文件描述符0和1各通过一个文件表打开一个文件
注:可能文件描述符0和3指向同一个文件表
多个进程打开一个文件
如《APUE E3rd》中figure 3.8所示,两个进程打开同一个文件。
两个进程使用的文件表都是进程独有的。也就是说一个文件表虽然是内核维护的,但它至属于某一个特定进程。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。