您可以在内核本身中找到一些很好的示例。看下一个文件:
- 驱动程序/char/rtc.c
- fs / proc / kmsg.c
- drivers / char / random.c
要将
poll()功能添加到代码中,请遵循以下步骤。
- 包括所需的标题:
#include <linux/wait.h>#include <linux/poll.h>
- 声明waitqueue变量:
static DECLARE_WAIT_QUEUE_HEAD(fortune_wait);
- 添加
fortune_poll()
函数并将其(作为.poll
回调)添加到文件 *** 作结构中:
static unsigned int fortune_poll(struct file *file, poll_table *wait){poll_wait(file, &fortune_wait, wait);if (new-data-is-ready) return POLLIN | POLLRDNORM;return 0;}static const struct file_operations proc_test_fops = {.....poll = fortune_poll,};
请注意,
POLLIN |POLLRDNORM如果您有一些新数据要读取,并且
0没有新数据要读取(
poll()呼叫超时),则应返回。有关详细信息,请参见man2民意调查。
- 有了新数据后,通知您的等待队列:
wake_up_interruptible(&fortune_wait);
这是实现
poll()*** 作的基本内容。根据您的任务,可能需要在函数中使用一些waitqueue
API
.read(例如
wait_event_interruptible())。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)