epoll_wait详解

epoll_wait,等待epoll文件描述符上的I / O事件。

#include <sys / epoll.h>

int epoll_wait(int epfd,struct epoll_event * events, int maxevents,int timeout);

       epoll_wait()系统调用等待文件描述符epfd引用的epoll实例上的事件。事件所指向的存储区域将包含可供调用者使用的事件。 epoll_wait()最多返回最大事件。 maxevents参数必须大于零。 timeout参数指定epoll_wait()将阻止的最小毫秒数。 (此间隔将四舍五入为系统时钟的粒度,并且内核调度延迟意味着阻塞间隔可能会少量溢出。)指定超时值为-1会导致epoll_wait()无限期阻塞,而指定的超时时间等于零导致epoll_wait()立即返回,即使没有可用事件。

       结构epoll_event定义为:         

 typedef union epoll_data {
               无效* ptr;
               int fd;
               uint32_t u32;
               uint64_t u64;
           } epoll_data_t;

           struct epoll_event {
               uint32_t事件; / * Epoll事件* /
               epoll_data_t数据; / *用户数据变量* /
           };

       每个返回结构的数据将包含用户使用epoll_ctl设置的相同数据(EPOLL_CTL_ADD,EPOLL_CTL_MOD),而事件成员将包含返回的事件位字段。

返回值:成功时,epoll_wait()返回为请求的I / O准备就绪的文件描述符的数目;如果在请求的超时毫秒内没有文件描述符准备就绪,则返回零。发生错误时,epoll_wait()返回-1并正确设置errno。

错误errno:
       EBADF:epfd不是有效的文件描述符。

       EFAULT:具有写许可权不能访问事件指向的存储区。

       EINTR:在任何请求的事件发生或超时到期之前,信号处理程序中断了该调用;参见signal(7)。

       EINVAL:epfd不是epoll文件描述符,或者maxevents小于或等于零。

注意:当一个线程在对epoll_pwait()的调用中被阻止时,另一个线程有可能向等待的epoll实例添加文件描述符。如果新文件描述符准备就绪,它将导致epoll_wait()调用解除阻止。

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值