多路 IO 转接 :poll 函数

(1)头文件

#include <poll.h>

(2)函数原型

int poll (struct pollfd *fds, nfds_t nfds, int timeout);

(3)参数
参 1:struct pollfd 类型结构体数组的首地址 。是传入传出参数

struct pollfd 
{
int fd; // 要监听的文件描述符:负值无效
short events; // 要监听的事件宏: POLLIN (读) / POLLOUT(写) / POLLERR
short revents; // 返回的事件宏:调用 poll 后内核填写(与 events 相同),可初始化为 0
};

参 2:数组实际有效大小 (比如数组初始化定义 100,但只使用了 5 个,nfds = 5)。
参 3:int 型 : -1代表永久阻塞,直到监控事件发生;0代表立即返回,不阻塞进程;> 0表示等待指定的毫秒数。
(4)返回值
成功返回所监听的监听集合中满足条件的文件描述符总数量;失败返回-1,设置errno,若timeout=0,errno=EAGAIN则代表正常。
(5)poll 相较于 select 的优势
poll 突破了 1024 的限制;select 的监听和返回的集合是不分离的,是通过传入传出的方式实现;而 poll 通过“参数 1”的结构体实现请求和返回分离。
(6)poll 相较于 select 的劣势
1不能跨平台,只能在 linux 下使用,导致 poll 地位比较尴尬。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值