首页 > 解决方案 > 什么时候为内核空间中的打开文件创建`struct file*`?

问题描述

我正在学习 Linux Kernel,主要是阅读LDD3。我有点困惑。也就是说(ch3,第 53 页):

file结构代表一个打开的文件。(它不特定于设备驱动程序;系统中每个打开的文件在struct file内核空间中都有一个关联。)它由内核在打开时创建,并传递给对该文件进行操作的任何函数,直到最后一个close。在文件的所有实例都关闭后,内核释放数据结构。

另一方面,较早的人可以阅读有关open文件操作的信息(ch3,p.51):

虽然这始终是对设备文件执行的第一个操作,但驱动程序不需要声明相应的方法。如果此条目为 NULL ,则打开设备始终成功,但不会通知您的驱动程序。

那么如果我不提供这个文件操作,那么当file创建对应于我的打开文件时呢?例如,我写了一个小例子,它在文件系统中生成一个文件/proc,但没有提供open文件操作——只有read操作:

static struct file_operations this_proc_ops = 
{
    .owner = THIS_MODULE,
    .read = this_proc_read
};

我可以打开它并成功阅读。file我想如果没有内核空间中的对应是不可能的,不是吗?所以我的问题是struct file在这种情况下何时创建?

标签: cfilelinux-kernel

解决方案


推荐阅读