码迷,mamicode.com
首页 > 其他好文 > 详细

【IO复用之poll】

时间:2020-09-09 18:53:57      阅读:47      评论:0      收藏:0      [点我收藏+]

标签:分离   c++   class   some   监听   nts   star   时间   内核   

承接上篇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】

标签:分离   c++   class   some   监听   nts   star   时间   内核   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!