【linux文件系统】inode索引节点/dentry目录对象/file文件对象

资料链接:

Linux 内核编程之文件系统(二)

几个关系:

(1)inode索引节点表示文件的信息——每个文件都有一个inode。

(2)dentry目录项表示文件名与inode的对应关系。

(3)一个inode可能对应止一个dentry结构。


(一)inode索引节点:

            一个文件对应的索引节点和超级块对象是唯一的,有多少个文件就有多少个索引节点。

            inode结构中几个重要成员:

            (1)i_no——索引节点号;

            (2)i_dentry——该节点可由多个目录项指向,i_dentry为这些目录项组成的链表的头节点。

(二)dentry目录项:

             一个路径的各个组成部分,不管是目录还是普通的文件,都是一个目录项对象。如,在路径/home/source/test.c中,目录 /, home, source和文件test.c都对应一个目录项对象。不同于前面的两个对象,目录项对象没有对应的磁盘数据结构,VFS在遍历路径名的过程中现场将它们逐个地解析成目录项对象。

             结构中几个重要成员:

             (1)d_inode——为该目录项对应的索引节点指针。

             (2)d_count——该目录项的引用计数。

             (3)d_parent——指向父目录项。

             (4)d_subdirs——如果该目录项是目录,该目录下的所有子目录形成一个链表,该字段是这个链表的表头。

             (5)d_child——如果当前目录项是一个目录,那么该目录项通过这个字段加入到父目录的d_subdirs链表当中。这个字段中的next和prev指针分别 指向父目录中的另外两个子目录。

             (6)d_alias——索引节点目录项别名链表。索引节点中i_dentry为指向它的所有目录项形成的链表的头节点。当前目录项以d_alias处于i_dentry表中,该字段中的prev和next指针分别指向与该目录项同inode的其他两个(如果有的话)目录项。

             (7)d_name——目录项名(文件名)。

(三)inode与dentry的关系:

           dentry可以多次指向同一个inode,dentry中的d_count记录了链接的数量。

(四)file文件对象:

          文件对象 通过f_path.dentry指针指向相关的目录项对象。目录项会指向相关的索引节点,索引节点会记录文件是否是脏的。

         该结构中的几个重要成员:

            (1)fu_list——每个文件系统中以被打开的文件都会形成一个双联表,这个双联表的头结点存放在超级块的s_files字段中。该字段的prev和next指针分别指向在链表中与当前文件结构体相邻的前后两个元素.

            (2)f_dentry——与该文件对应的dentry。

            (3)f_op——指向文件操作函数的指针。

            (4)f_count——文件对象的使用计数。

            (5)f_pos——文件的当前偏移量。


(五)多个dentry可以指向同一个索引节点;

            多个file文件对象可以指向同一个dentry;

            多个文件描述符可以共用同一个file文件对象;

            一个file对象指向一个dentry——一个dentry指向一个索引节点。

(六)pipe后,父子进程共用两个(读写)文件对象,两个文件对象指向同一个临时索引节点,临时索引节点指向一个物理页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值