用途:
poll 系统调用和 select 类似,也是在指定时间内轮询一定数量的文件描述符,检测其中是否有就绪的文件描述符。
#include <poll.h>
/*
* fd 参数是一个 pollfd 结构类型的数组,它指定所有感兴趣的文件描述符上发生的可读、可写和异常等事件
* nfds 参数指定被监听事件集合 fds 的大小
* timeout 参数指定 poll 的超时值,当 timeout 为 -1 时,poll 调用将永远阻塞,直到某个事件发生
*/
int poll( struct pollfd* fds, nfds_t nfds, int timeout );
struct pollfd
{
int fd; /* 文件描述符 */
short events; /* 注册的事件 */
short revents; /* 实际发生的事件,由内核填充 */
}
typedef unsigned long int nfds_t;
poll 系统调用的返回值的含义与 select 相同,成功返回就绪(可读、可写和异常)文件描述符的总数,超时时间内没有任何文件描述符就绪的话就返回 0,失败返回 -1 并设置 errno 为 EINTR
poll 支持的事件类型:
POLLIN——数据(包括普通数据和优先数据)可读
POLLRDNORM——-普通数据可读
POLLRDBAND——-优先级带数据可读(linux不支持)
POLLPRI——-高优先级数据可读,比如TCP带外数据
POLLOUT——数据(包括普通数据和优先数据)可写
POLLWRNORM——普通数据可写
POLLWRBAND——优先级带数据可写
POLLRDHUP——TCP连接被关闭,或者对方关闭了写操作。它由GNU引入
POLLERP——错误
POLLHUP——挂起。比如管道的写端被关闭后u,读端描述符上将收到POLLHUP事件
POLLNVAL——文件描述符没有打开