VFS之dentry目录项描述

本文详细解析了 Linux 文件系统中 dentry 结构的作用及各字段含义,包括目录项的组织方式、查找哈希列表、父目录引用、名称字符串、inode 关联等,有助于深入理解 Linux 文件系统的内部实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录项是对文件和目录等组织,其更多描述文件这种层次关系:
struct dentry {
    /* RCU lookup touched fields */
    unsigned int d_flags;            /* protected by d_lock */
    seqcount_t d_seq;                /* per dentry seqlock */
    struct hlist_bl_node d_hash;    /* lookup hash list */
    struct dentry *d_parent;        /* parent directory */
    struct qstr d_name;
    struct inode *d_inode;            /* Where the name belongs to - NULL is negative */
    unsigned char d_iname[DNAME_INLINE_LEN];    /* small names */

    /* Ref lookup also touches following */
    struct lockref d_lockref;        /* per-dentry lock and refcount */
    const struct dentry_operations *d_op;
    struct super_block *d_sb;    /* The root of the dentry tree */
    unsigned long d_time;        /* used by d_revalidate */
    void *d_fsdata;                /* fs-specific data */

    union {
        struct list_head d_lru;        /* LRU list */
        wait_queue_head_t *d_wait;    /* in-lookup ones only */
    };
    struct list_head d_child;        /* child of parent list */
    struct list_head d_subdirs;        /* our children */
    /*
     * d_alias and d_rcu can share memory
     */
    union {
        struct hlist_node d_alias;    /* inode alias list */
        struct hlist_bl_node d_in_lookup_hash;    /* only for in-lookup ones */
         struct rcu_head d_rcu;
    } d_u;
};






 

 
### Linux VFS(虚拟文件系统)介绍 #### 定义与作用 VFS(虚拟文件系统),作为Linux内核的一部分,提供了对各种实际存在的文件系统的抽象接口。通过这一机制,即使底层物理存储介质和具体文件系统类型各异,用户空间的应用程序也能以一致的方式访问文件资源[^1]。 #### 主要对象类型 在VFS的设计中定义了几种核心的数据结构来描述文件及其属性: - **超级块(Superblock)**:保存着有关整个文件系统的元数据信息,比如总大小、剩余可用空间等; - **索引节点(Inode)**:记录单个文件或目录的技术细节,如权限设置、创建时间戳以及指向数据块的位置; - **目录Dentry)**:用于表示路径名中的各个部分,并建立父子关系链表以便快速查找目标位置; - **挂载点(Mount Point)**:允许在一个已有的文件系统之上附加另一个新的实例,从而构建复杂的层次化视图[^2]; #### 文件读取流程概述 当应用程序发起一次普通的`open()`调用请求打开某个特定路径下的文件时,VFS会依次执行下列操作直至最终定位到所需的目标并返回相应的句柄给调用者: 1. 解析传入字符串形式的全限定名称为一系列连续相连的dentry单元; 2. 遍历上述链条直到找到匹配的最后一级成员为止; 3. 如果存在则进一步验证其关联inodes的有效性和可访问性; 4. 成功之后初始化必要的内部状态变量并将控制权交回至外部API层面处理后续动作。 #### 多重文件系统支持 得益于VFS的存在,使得在同一台机器上可以同时加载运行多个不同类型甚至来自异构平台上的文件系统成为可能。例如,在一个基于ext3格式搭建起来的基础环境里边还可以额外接入诸如ext4或者是xfs这样的高级变体版本,进而形成一棵跨越多代技术演进成果的整体树形拓扑结构[^4]。 ```c // 示例代码展示如何获取当前工作目录下所有条目的基本信息 #include <sys/types.h> #include <dirent.h> #include <stdio.h> int main() { DIR *dir; struct dirent *ent; if ((dir = opendir(".")) != NULL) { while ((ent = readdir(dir)) != NULL) { printf("%s\n", ent->d_name); } closedir(dir); } else { perror(""); return EXIT_FAILURE; } return EXIT_SUCCESS; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值