欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

访谈必备:选择、民意调查、Epoll-3 民意调查的详细分析

最编程 2024-04-22 17:16:33
...

讲解了 select 函数之后,相信各位读者对 poll 的理解便没有多大难度了。poll 的机制与 select 几乎相同,会对管理的描述符进行轮询操作,并根据描述符的状态进行相应的处理。

poll 将用户传入的数组拷贝到内核空间,然后查询每个描述符对应的设备状态,如果设备就绪则在设备等待队列中加入一项并继续遍历,如果遍历完所有描述符后没有发现就绪设备,则挂起当前进程,直到设备就绪或者主动超时。

3.1 poll 与 select 的区别

select 函数中,内核对 fd_set 集合的大小做出了限制,大小不可变为1024;而 poll 函数中,并没有最大文件描述符数量的限制(基于链表存储)。

3.2 函数定义
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
3.3 参数
  1. struct pollfd *fds :存放需要检测状态的 socket 描述符,调用 poll 函数后,fds 数组不会被清空。pollfd 结构体表示一个被监视的文件描述符,poll 函数会通过 fds 参数的传递来监视多个文件描述符
  2. nfds_t nfds : 记录 fds 中描述符的总数量
3.4 返回值

返回值类型为 int ,返回 fds 集合中就绪的读、写或出错的描述符数量,若返回0则表示超时,若返回-1则表示出错。