Linux内核文件系统-虚拟文件系统-目录项操作

建议点击这里查看个人主页上的最新原文

点击这里在哔哩哔哩bilibili在线观看配套的教学视频

点击这里在哔哩哔哩bilibili在线观看配套的加餐视频(就是一些补充)

点击跳转到内核课程所有目录

一般的Linux书籍都是先讲解进程和内存相关的知识,但我想先讲解文件系统。第一,因为我就是做文件系统的,更擅长这一块,其他模块的内容我还要再去好好看看书,毕竟不能误人子弟嘛;第二,是因为文件系统模块更接近于用户态,是相对比较好理解的内容(当然想深入还是要下大功夫的),由文件系统入手比较适合初学者。

虚拟文件系统英文全称Virtual file system,缩写为VFS,又称为虚拟文件切换系统(virtual filesystem switch)。所有的文件系统都要先经过虚拟文件系统层,虚拟文件系统相当于制定了一套规则,如果你想写一个新的文件系统,只需要遵守这套规则就可以了。

VFS虽然是用C语言写的,但使用了面向对象的设计思路。

目录项对象中最重要的一个成员是d_op,目录项操作结构体定义在include/linux/dcache.h中,方法不多。

struct dentry_operations {
        int (*d_revalidate)(struct dentry *, unsigned int); // 判断目录项对象是否有效,从缓存中使用目录项时会调用,一般文件系统不实现这个方法
        int (*d_weak_revalidate)(struct dentry *, unsigned int);
        int (*d_hash)(const struct dentry *, struct qstr *); // 生成散列值
        int (*d_compare)(const struct dentry *, // 比较两个文件名,微软的文件系统需要实现,因为不区分大小写
                        unsigned int, const char *, const struct qstr *);
        int (*d_delete)(const struct dentry *); // d_count等于0时调用
        int (*d_init)(struct dentry *);
        void (*d_release)(struct dentry *); // 释放
        void (*d_prune)(struct dentry *);
        void (*d_iput)(struct dentry *, struct inode *); // dentry丢失相关的inode,也就是磁盘索引节点被删除了,调用此方法
        char *(*d_dname)(struct dentry *, char *, int);
        struct vfsmount *(*d_automount)(struct path *);
        int (*d_manage)(const struct path *, bool);
        struct dentry *(*d_real)(struct dentry *, const struct inode *);
} ____cacheline_aligned;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值