Linux 设备驱动--- Poll 方法 --- Select
Posted sky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 设备驱动--- Poll 方法 --- Select相关的知识,希望对你有一定的参考价值。
转自:http://blog.csdn.net/yikai2009/article/details/8653842
版权声明:本文为博主原创文章,未经博主允许不得转载。
在驱动 ( 内核空间 ) Poll 方法 对应的是 Select 系统调用 ( 用户空间 ).
Poll -------------------------> Select
Select - 系统调用 int select - 功能:
Seclect 系统调用用于多路监控,当没有一个文件满足要求时,Select将阻塞调用进程.
函数:
int select ( int maxfd , fd_set *readfds , fd_set * writefds , fe_set *exceptfds , const stuct timeval * timeout ) .
参数:
Maxfd : 文件描述符的范围,比待检测的最大文件描述符 大 1 .
Readfds :被读检测的文件描述符集.
Writefds :被写监控的文件描述符集.
Exceptfds:被异常监控的文件描述符集.
Timeout :定时器.
Timeout 取不同的值。该调用有不同的表现:
1,Timeout 值为 0,不管是否有文件满足要求,都立刻返回.
无文件满足要求返回 0 ,有文件满足要求返回一个正值.
2,Timeout 为 NULL .Select 将阻塞进程. 直到某个文件满足要求.
3,Timeout 为正整数,就是等待的最长时间,即 Select 在 Timeout 时间内阻塞进程.
返回值:
Select 调用返回时,返回值有如下情况:
1,正常情况下返回满足要求的文件描述符个数.
2,经过了 Timeout 等待后仍无文件满足要求,返回值为 0 .
3,如果 Select 被某个信号中断,它将返回 -1 并 设置 errno 为 EINTR .
4,如果出错,返回 -1 并设置相应的 errno .
Select - 系统调用- 使用方法:
1,将要监控的文件添加到文件描述符集.
2,调用 Select 开始监控.
3,判断文件是否发生变化.
四个宏对描述符集进行操作 - FD_SET - FD_CLR - FD_ZERO - FD_ISSET :
Poll 方法 - 驱动中 int (*poll) :
Poll 设备方法负责完成 - 驱动中 :
使用 poll_wait 将等待队列添加到 poll_table 中:
返回描述设备是否 可读 或者 可写 的掩码 - POLLIN :
eg:
Poll 工作原理:
Poll 方法只是做一个登记,真正的阻塞发生在 select.c 中的 do_select 函数中.
以上是关于Linux 设备驱动--- Poll 方法 --- Select的主要内容,如果未能解决你的问题,请参考以下文章