Linux 的磁盘文件在内核中使用"file"结构表示。文件结构中有一个"file_operations",它是一个指针数组,其中一个是"poll"函数指针。如下:
struct file {
...
Const struct file_operations * f_op;
...
}
struct file_operations {
...
Ssize_t (* read) (struct file *, char __user *, size_t, loff_t *);
...
Ssize_t (* write) (struct file *, const char __user *, size_t, loff_t *);
...
Unsigned int (* poll) (struct file *, struct poll_table_struct *);
...
}
我也知道磁盘文件的读取和写入将通过一层虚拟文件系统(VFS(。
我想问的是:
虚拟文件系统是否实现了"轮询"功能?
Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
Linux 源代码中普通磁盘文件的"轮询"功能在哪里实现?
poll
函数不为">普通"文件实现。
对于此类文件,read
和write
操作永远不会被阻止,因此轮询它们将始终立即返回。
轮询对于特殊文件(如管道或套接字(很有用。只有这些文件实现了poll
功能。