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

来源:互联网 发布:中国教育干部网络一 编辑:程序博客网 时间:2024/06/08 06:35

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添加一个等待队列

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

原创粉丝点击