linux下的inode_operations 和 file_operations结构体

在 Linux 内核中,inode_operations 和 file_operations 是两个极其重要的结构体,它们定义了文件系统或设备驱动程序向内核提供的一组回调函数(操作函数)​,用于处理与文件/目录/设备相关的各种操作。

虽然它们都跟“文件操作”有关,但它们的作用对象和层次是不同的:


一、总体对比

项目 inode_operations file_operations
作用对象 针对 ​inode(索引节点)​,即文件系统中的某个对象(如文件、目录、设备)本身 针对 ​已打开的文件(file)​,即用户空间打开文件后得到的句柄
操作时机 在文件/目录被查找、创建、删除、链接等时候触发,属于元数据操作 在文件被读写、打开、关闭、定位(lseek)、IO控制等时候触发,属于数据操作或控制操作
典型用途 定义目录操作、文件创建、符号链接、权限控制等 定义文件读写、IO控制(ioctl)、文件定位等
相关结构 与 struct inode 关联 与 struct file 关联
常见函数 .lookup.create.mkdir.unlink.link.symlink 等 .read.write.open.release.llseek.ioctl.mmap 等

二、inode_operations(inode 操作集)

🧩 定义位置:

📂 文件:include/linux/fs.h

struct inode_operations {
    // 目录相关操作
    struct dentry * (*lookup) (struct inode *, struct dentry *, unsigned int);
    struct dentry * (*lookup_one_len)(const char *, struct dentry *, int);

    // 创建文件
    int (*create) (struct user_namespace *, struct inode *, struct dentry *, umode
设备驱动程序与内核的接口通过数据结构 file_operations 完成。 在 Linux 中,每个设备驱动程序都对应一个 file_operations 结构体,它用于定义设备驱动程序的操作方法回调函数。file_operations 结构体通常包含以下字段: - 文件打开方法(open):用于打开设备文件,通常会进行设备初始化等操作。 - 文件读取方法(read):用于从设备中读取数据。 - 文件写入方法(write):用于向设备中写入数据。 - 文件定位方法(llseek):用于定位文件读写指针的位置。 - 文件控制方法(ioctl):用于执行设备的控制操作。 - 文件释放方法(release):用于释放设备资源,通常会进行设备关闭等操作。 设备驱动程序通过实现 file_operations 结构体中定义的方法回调函数来提供对设备的访问。当应用程序打开设备文件并执行读写等操作时,内核会根据文件描述符找到对应的 file_operations 结构体,并调用相应的方法来完成具体的操作。因此,file_operations 结构体是设备驱动程序与内核的接口之一,它定义了设备驱动程序的操作方法内核的调用方式,是设备驱动程序实现的关键。 需要注意的是,file_operations 结构体只是设备驱动程序与内核的接口之一,与文件系统的 inode_operations、super_block_operations、dentry_operations 等不同。file_operations 结构体用于定义设备驱动程序的操作方法回调函数,而 inode_operations、super_block_operations、dentry_operations 等则用于定义文件系统的操作方法回调函数。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值