Tak*_*ato 10 linux kernel linux-kernel
我正在尝试制作一个Linux内核模块,它支持打开,关闭,读取和写入操作.所以我想通过struct file_operations注册这些函数,但是我在struct中找不到'close'条目.我想我应该使用'release'而不是'close',但我想知道为什么这个名字是'release'而不是'close'?
我也有类似的困惑。Perreal 是正确的,因为在调用 close 时不调用 release。以下是Linux Device Drivers 3rd edition一书的摘录:
int (*flush) (struct file *);
Run Code Online (Sandbox Code Playgroud)
当进程关闭设备的文件描述符副本时调用刷新操作;它应该在设备上执行(并等待)任何未完成的操作。这不能与用户程序请求的 fsync 操作混淆。目前,flush 仅用于网络文件系统 (NFS) 代码。如果flush 为NULL,则不会调用它。
int (*release) (struct inode *, struct file *);
Run Code Online (Sandbox Code Playgroud)
当文件结构被释放时调用此操作。与 open 一样,release 可能会丢失。
请注意,每次进程调用 close 时都不会调用 release。每当共享文件结构时(例如,在 fork 或 dup 之后),在关闭所有副本之前都不会调用 release。如果您需要在任何副本关闭时刷新挂起的数据,您应该实现flush 方法。
| 归档时间: |
|
| 查看次数: |
7343 次 |
| 最近记录: |