蜗牛哒哒

LINUX教程-LINUX编程-Poll方法

作者: 蜗牛哒哒 发布时间: 2020-12-24 152 人阅读

Poll方法
应用程序常常使用select系统调用,它可能会阻塞进程。这个调用由驱动的 poll 方法实现,原型为:

unsigned int (*poll)(struct file *filp,poll_table *wait)

Poll设备方法负责完成:
使用poll_wait将任务添加到等待队列。
返回位掩码,描述读写能力
位掩码
POLLIN(0x1)
可读
POLLRDNORM(0x40)
数据可读
设备可读通常返回(POLLIN|POLLRDNORM )
POLLOUT(0x4)
可写
POLLWRNORM(0x100)
数据可写
设备可写通常返回(POLLOUT|POLLWRNORM )
范例
static unsigned int mem_poll(struct file *filp,poll_table *wait)
{
struct scull_pipe *dev =filp->private_data;
unsigned int mask =0;

/* 把进程添加到等待队列 */
poll_wait(filp,&dev->inq,wait);

/*返回掩码*/
if (有数据可读)
mask = POLLIN |POLLRDNORM;/*设备可读*/
return mask;
}
工作原理(内核代码分析)
Poll方法只是做一个登记,真正的阻塞发生在select.c 中的 do_select函数,处理流程:
1:初始化 poll_table 表2:依次调用每个文件的 poll 方法3:poll 方法调用的 poll_wait会把当前的进程挂到驱动提供的wait_queue_head_t中4:假如能读或能写或有信号,就返回5:否则调用 schedule_timeout 睡眠

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.本站所有资源不保证完整性,仅供参考学习!
3. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
4. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
5. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
6. 如有链接无法下载、失效或广告,请联系管理员处理!
7. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
8. 如遇到加密压缩包,默认解压密码为"woniudada",如遇到无法解压的请联系管理员处理!
蜗牛哒哒 » LINUX教程-LINUX编程-Poll方法