文章目录
  1. 1. file对象
  2. 2. dentry对象
  3. 3. inode对象
  4. 4. super_block对象
  5. 5. 文件描述符

本文Linux虚拟文件系统的几个重要对象。它们在Linux编程中比较重要。在进程编程等场景经常用到。

file对象

file对象是在进程观点上,进程中打开的文件的表示。

dentry对象

它表示一个实际的文件。不同进程打开同一个文件时,它们有不同的file对象,但是最终指向同一个dentry对象。

inode对象

linux将文件与文件的属性分开表示。inode对象包含了一个文件相关的所有属性信息。比如文件大小,文件权限,操作方法集,对应的块设备,修改时间等。

super_block对象

超级块对象。它包含磁盘上文件的一些元数据。是对文件系统具体的描述。

如下两张图,能够将这些对象的关系看得很清楚。
dentry示意图

vfs详细结构体关系

文件描述符

从上图知道,在进程中打开的文件,对应的文件描述符,就是file_struct结构体中,file指针数组fd_array的下标。所以,进程打开文件时,分配的文件描述符按照从小到大的值依次分配。有了文件描述符,内核就能够去索引对应的file结构体,从fops去获得对文件的操作函数集,以便对文件进行各种操作。

文章目录
  1. 1. file对象
  2. 2. dentry对象
  3. 3. inode对象
  4. 4. super_block对象
  5. 5. 文件描述符