
struct file是同享的;inode是共享的
files_struct 是每一个进程独立的;
linux内核会为每一个进程创建一个task_truct结构体来维护进程信息,称之为 进程描述符,该结构体中 指针
struct files_struct *files
指向一个名称为file_struct的结构体,该结构体即 进程级别的文件描述表。
它的每一个条目记录的是单个文件描述符的相关信息
1.fd控制标志,前内核仅定义了一个,即close-on-exec
2.文件描述符所打开的文件句柄的引用【注2】
内核对系统中所有打开的文件维护了一个描述符表,也被称之为 【打开文件表】,表格中的每一项被称之为 【打开文件句柄】,一个【打开文件句柄】 描述了一个打开文件的全部信息。
主要包括:
1.当前文件偏移量(调用read()和write()时更新,或使用lseek()直接修改)
2.打开文件时所使用的状态标识(即,open()的flags参数)
3.文件访问模式(如调用open()时所设置的只读模式、只写模式或读写模式)
4.与信号驱动相关的设置
5.对该文件i-node对象的引用
6.文件类型(例如:常规文件、套接字或FIFO)和访问权限
7.一个指针,指向该文件所持有的锁列表
8.文件的各种属性,包括文件大小以及与不同类型操作相关的时间戳
Inode表
每个文件系统会为存储于其上的所有文件(包括目录)维护一个i-node表,单个i-node包含以下信息:
1.文件类型(file type),可以是常规文件、目录、套接字或FIFO
2.访问权限
3.文件锁列表(file locks)
4.文件大小等等i-node存储在磁盘设备上,内核在内存中维护了一个副本,这里的i-node表为后者。副本除了原有信息,还包括:引用计数(从打开文件描述体)、所在设备号以及一些临时属性,例如文件锁。
