1、poll存在于内核空间,对应于用户空间的select。
有很多用系统调用(用户空间)对应到驱动(内核空间)的函数:
系统调用(用户空间) 驱动(内核空间)
Open Open
Close Release
Read Read
Write Write
Ioctl Ioctl
lseek llseek
Select/poll Poll
2、Poll设备方法的作用
① 使用poll_wait将等待队列添加到poll_table中。
②返回描述设备是否可读或可写的掩码 mask。
相关的位掩码如下:
POLLIN设备可读
POLLRDNORM数据可读
POLLOUT设备可写
POLLWRNORM数据可写
设备可读通常返回(POLLIN|POLLRDNORM )
设备可写通常返回(POLLOUT|POLLWRNORM )
wait_queue_head_t name = __WAIT_QUEUE_HEAD_INITIALIZER(name)
poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:
#include
int poll(struct pollfd fds[], nfds_t nfds, int timeout);
参数说明:
fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统不会清空这个数组,操作起来比较方便;特别是对于 socket连接比较多的情况下,在一定程度上可以提高处理的效率;这一点与select()函数不同,调用select()函数之后,select() 函数会清空它所检测的socket描述符集合,导致每次调用select()之前都必须把socket描述符重新加入到待检测的集合中;因 此,select()函数适合于只检测一个socket描述符的情况,而poll()函数适合于大量socket描述符的情况;