为什么close函数在Linux内核的`struct file_operations`中被称为release?
问题描述:
我试图做一个Linux内核模块,它支持打开,关闭,读取和写入操作。 所以我想通过结构file_operations注册这些函数,但是我无法在结构中找到'close'条目。 我想我应该使用'release'而不是'close',但是我想知道为什么这个名字是'release'而不是'close'?为什么close函数在Linux内核的`struct file_operations`中被称为release?
答
我也有类似的困惑。 Perreal是正确的,因为在调用close时不会调用该版本。这里是从书Linux Device Drivers 3rd edition的提取物:
int (*flush) (struct file *);
当一个进程关闭其用于设备的文件描述符的拷贝的刷新操作被调用;它应该执行(并等待)设备上的任何未完成的操作。这不能与用户程序请求的fsync操作混淆。目前,flush仅用于网络文件系统(NFS)代码。如果flush为NULL,则不会调用它。
int (*release) (struct inode *, struct file *);
当文件结构被释放时调用此操作。像open一样,release可能会丢失。
请注意,每次进程调用close时都不会调用release。无论何时共享文件结构(例如,在fork或dup之后),在所有副本都关闭之前,不会调用release。如果您需要在任何副本关闭时刷新待处理数据,则应执行刷新方法。
所以你问为什么它被称为'release'而不是'close'? – cnicutar 2012-07-09 10:58:00
是的,我确定了标题。 – 2012-07-09 11:06:17