【Linux】I/O多路复用—poll

poll类似于select,但是接口有所不同。

原型

#include <poll.h>
int poll(struct pollfd fdarray[], nfds_t nfds, int timeout);
返回值:准备就绪的描述符数;若超时,返回0;若出错,返回-1

与select不同,poll不是构造三个描述符集,而是使用一个pollfd结构的数组,每个元素指定一个描述符编号以及我们对该描述符感兴趣的条件。fdarray中的元素数由nfds来指定。

pollfd结构

//pollfd结构
struct pollfd {
int fd;
short events;
short revents;
};

每个events成员设置为下图所示值的一个或几个,通过这些值告诉内核我们关心的是描述符的哪些事件。返回时,revents成员由内核设置,用于说明每个描述符发生了哪些事件。
下图各行分别对应读、写和异常,注意到最后三行的标志是不需要设置的,只要响应条件发生, 就会在revents中返回它们。

timeout参数

该参数指定等待时间

  • timeout == -1
    永远等待。如果有描述符准备好,则返回数目;若超时,则返回-1,并置errno为EINTR。

  • timeout == 0
    不等待。测试所有描述符并立即返回。

  • timeout > 0
    等待timeout毫秒。如果超时,则返回0。

注意:

  • 和select一样,一个描述符是否阻塞不影响poll是否阻塞。
  • 在linux中,被信号中断后,select和poll是不会自动重启的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值