首页 > 其他 > 详细

【IO复用之poll】

时间:2020-08-29 00:56:10      阅读:111      评论:0      收藏:0      [点我收藏+]

承接上篇IO复用之select
selet将描述符和事件分离,所以在select接口需要传入三个数组表示不同的事件集合。poll也是在一定时间内轮询所有的描述符,但它将事件和描述结合。

函数签名

#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);
  1. fd是一个pollfd类型的数组,他指定了描述符上可读、可写等事件
struct pollfd
{
      int fd;            /* 文件描述符 */
      short events;      /* 注册的事件 */
      short revents;     /* 实际发生的事件,由内核填充 */
};

其中events告诉poll监听fd上发生的事件,他的每一位表示一类事件。revents由内核修改,通知应用实际发生了哪些事件。

  1. nfds参数指定监听事件fds大小
typedef unsigned long int nfds_t;

编程示例

int ret = poll(fds, MAX_EVENT_NUM, -1);
for (int i = 0; i < MAX_EVENT_NUM; i++)
{
      if (fds[i].revents & POLLIN) /* 该描述符上有可读事件 */
      {
            int sockfd = fds[i].fd;
            /* do something */
      }
}

【IO复用之poll】

原文:https://www.cnblogs.com/xpl671/p/13580427.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!