一个打开的文件在内核当中的数据结构(三种)
1.文件描述符表(进程级)
- 文件描述符标志
- 文件表项指针
2.文件表项(系统级)
- 文件状态标志
- i节点表项指针
- 当前文件偏移量
- 引用计数器
3.i节点(文件系统)
- 文件类型和对应的操作函数指针
- 当前文件长度
- 文件所有者
- 文件所在的设备和文件权限
- 指向文件数据在磁盘上的位置指针
各打开的文件数据结构之间的关系如图:
注:
- 文件描述表是相对于进程而言的即不同的进程有自己的文件描述符表(都是从0开始的)但是各进程的文件描述表由系统维护,在不同的进程当中相同的文件描述符有可能指向相同的文件表项,也可能指向不同的文件表项这都是视情况而定的。也就是说:建立在打开的文件基础之上的。
- 文件表项也称打开的文件表该表的数组下标就是我们熟知的文件句柄。不同的文件有不同的文件句柄也就是说建立在文件基础之上的,不管文件打开多少次在该表中只有一个表项;由于文件偏移量在该表中,这就存在一个问题就是;当不同的进程打开同一文件时共享文件偏移量。