I/O复用-poll系统调用

来源:互联网 发布:淘宝金冠和天猫哪个好? 编辑:程序博客网 时间:2024/06/18 11:25

用途:
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——文件描述符没有打开

0 0
原创粉丝点击