epoll_wait

epoll_wait

 

EPOLL_WAIT

章节:Linux 程序员手册 (2)
更新:2010-12-03

到  易美翻译 翻译  本页

名字

epoll_wait, epoll_pwait - 在一个 epoll 文件描述符上等待 I/O 事件

概要

#include <sys/epoll.h>

int epoll_wait(int epfd, struct epoll_event *events,
 int maxevents, int timeout);
int epoll_pwait(int epfd, struct epoll_event *events,
 int maxevents, int timeout,
 const sigset_t *sigmask);

描述

epoll_wait() 系统调用等待由文件描述符  epfd 引用的  epoll 实例上的事件。 events 指针指向的内存包含对调用者有效的事件。当达到 maxevents 时 epoll_wait() 会返回。maxevents 参数必须大于零

调用等待最长时间是 timeout 毫秒。指针 timeout 为 -1 让 epoll_wait() 无限期地等待,若指定 timeout 为零时即使在没有事件有效 epoll_wait() 也会立即返回(返回值是零)。

struct epoll_event 定义如下:

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

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

当成员 events 包含返回的事件位时,返回的结构中 data 数据成员与用户调用 epoll_ctl(2)(EPOLL_CTL_ADDEPOLL_CTL_MOD)提供的值相同。

epoll_pwait()

epoll_wait() 和  epoll_pwait() 的关系与  select(2) 和  pselect(2) 关系很相似:正如  pselect(2) 一样, epoll_wait() 允许应用程序安全地等待直到文件描述符准备好,或直到信号被捕获。

下面的 epoll_pwait() 调用:

    ready = epoll_pwait(epfd, &events, maxevents, timeout, &sigmask);

与  原子地 执行下列调用:
    sigset_t origmask;

    sigprocmask(SIG_SETMASK, &sigmask, &origmask);
    ready = epoll_wait(epfd, &events, maxevents, timeout);
    sigprocmask(SIG_SETMASK, &origmask, NULL);

sigmask 参数可以指定为 NULL,此时 epoll_pwait() 与 epoll_wait() 相同。

返回值

成功时, epoll_wait() 返回就绪的请求的 I/O 个数,如果在  timeout 毫秒里没有文件描述符就绪返回零。发生错误时, epoll_wait() 返回 -1 同时把  errno 设置为合适的值。

错误

EBADF
epfd 不是一个有效的文件描述符。
EFAULT
events 指向的内存没有写权限。
EINTR
在请求事件就绪或  timeout 到期之前,这个调用被信号处理器中断,参看  signal(7)。
EINVAL
epfd 不是一个  epoll 文件描述符,或  maxevents 小于或等于零。

版本

epoll_wait() 在内核版本 2.6 加入。glibc 从版本 2.3.2 开始支持。

epoll_pwait() 在内核版本 2.6.19 加入。glibc 从版本 2.6 开始支持。

遵循于

epoll_wait() 是 Linux 特有的。

参看

epoll_create(2)、 epoll_ctl(2)、 epoll(7)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值