epoll_wait 函数(译)

英文源自:http://man7.org/linux/man-pages/man2/epoll_wait.2.html

梗概

<br />
 #include &lt;sys/epoll.h&gt;<br />
 int epoll_wait(int epfd, struct epoll_event *events,<br />
                      int maxevents, int timeout);<br />
 int epoll_pwait(int epfd, struct epoll_event *events,<br />
                      int maxevents, int timeout,<br />
                      const sigset_t *sigmask);<br />

描述

epoll_wait 该系统等待 epoll的实例化文件描述符epfd 响应,events指针指向响应的事件列表,这些事件是之前在epfd通过epoll_ctl注册的文件描述符的响应,maxevents 该参数必须大于0,表示响应的最大的时间数量。
timeout参数指定epoll_wait阻塞的时间。该函数会在下列情况下停止:

  1. 每一个epfd上注册的文件描述符都有了响应。
  2. 该调用被信号句柄终止
  3. 或者超时,超过了timeout

timeout 精确到系统的时钟的粒度,内核的调度的延迟意味着阻塞的时间会有一丁点的超时。如果timeout设置成-1,意味着无限期的阻塞,设置成0意味着函数立即返回,不管是不是有事件响应。

epoll_event 定义如下

<br />
 typedef union epoll_data {<br />
         void    *ptr;<br />
         int      fd;<br />
         uint32_t u32;<br />
         uint64_t u64;<br />
 } epoll_data_t;</p>
<p> struct epoll_event {<br />
        uint32_t     events;    /* Epoll events */<br />
        epoll_data_t data;      /* User data variable */<br />
 };<br />

data 返回的结构体会包含与epoll_ctl 相同的数据,而events 会包含一个时间位列。

返回值

成功的时候,epoll_wait 会返回就绪的 描述字数量,如果 timeout 毫秒内没有文件描述子变成可用返回0。出错的时候,epoll_wait 返回-1,errno会被设置成对应的值。

错误

  1. EBADF  epfd 不是正确的文件描述符。
  2. EFAULT  events 不可写。
  3. EINTR   函数被中断了。
  4. EINVAL epfd 不是epoll 文件描述字,或者maxevents 小于等于0;

Leave a comment

Your email address will not be published.

*