高级字符驱动程序操作之poll(理论篇)

1. poll系统调用

 

int poll(struct pollfd *fds, unsigned int nfds, int timeout);

poll由System V引入,作用是查询用户进程是否可以对一个或者多个打开的文件做非阻塞的读取或写入

 

那poll到底有什么用呢?举个例子说,当一个进程中有两个输入流,一个叫做A,一个叫做B;再假设A没有数据了,而B有充足的数据;这时候会发生什么?聪明的你一下就明白了,进程被阻塞在输入流A上面,这样对输入流B公平么?

 

事实上,poll系统调用本身在也会阻塞进程,但是只要有一个文件有数据,poll就会被唤醒,这时候用户进程就可以根据poll返回的信息(这些信息就是哪些文件有数据了,哪些依然没有数据)正确的调用read方法,而不至于陷入没有必要的休眠中了,对输出流的分析是一样的道理。

 

2. poll的驱动原型

 

对应到驱动程序的中,poll的原型是

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

 

当用户进程调用poll的时候,驱动程序中的poll就被调用,通常驱动程序中的poll会做两项工作以满足用户进程的查询要求:

第一: 调用poll_wait方法,向poll_table添加一个等待队列

第二: 返回位掩码形式的查询结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值