I/O复用-poll系统调用

用途:
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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值