epoll man手册解读

本文深入解读epoll的手册,详细介绍了epoll_create(), epoll_wait(), epoll_ctl()三个主要函数的使用,包括概要、描述、返回值和错误处理。文章还探讨了epoll的Level-Triggered和Edge-Triggered模式,提供了示例程序,并解答了多个常见问题,最后指出了使用中可能遇到的陷阱和解决策略。" 133363631,20014317,维点云中的数据标注实践,"['计算机视觉', '深度学习', '数据标注', '自然语言处理', '云计算']
摘要由CSDN通过智能技术生成

epoll man手册解读

1.epoll_create()

1.1.概要

#include <sys/epoll.h>

int epoll_create(int size);
int epoll_create1(int flags);

1.2.描述

epoll_create()

epoll_create()创建一个epoll“实例”,size参数目前被忽略。
epoll_create()返回一个引用新的epoll实例的文件描述符。
当不再需要时,应该使用close()关闭epoll_create()返回的文件描述符。

epoll_create1()

如果falgs为0,epoll_create1()与epoll_create()相同。
标志中可以包含以下值以获得不同的行为:
EPOLL_CLOEXEC
    在新的文件描述符上设置关闭执行(FD_CLOEXEC)标志。 有关这可能有用的原因,请参阅open(2)中的O_CLOEXEC标志的描述。

1.3.返回值

成功时:返回一个非负文件描述符;
错误时:返回-1,并将errno设置为指示错误。

1.4.错误

EINVAL size设置出错。

2.epoll_wait()

2.1.概要

#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);

2.2.描述

epoll_wait()

epoll_wait()系统调用等待文件描述符epfd引用的epoll实例上的事件。 
maxevents参数必须大于零。
该调用超时等待时间为timeout毫秒。
timeout为-1时,会使epoll_wait()无限期地等待;
timeout为 0时,即使没有可用的事件(返回码等于零),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;      /* 用户数据变量 */
    };

The data of each returned structure will contain the same data
the user set with an epoll_ctl(2) (EPOLL_CTL_ADD,EPOLL_CTL_MOD)
while the events member will contain the returned event bit field.

event成员可以下面的事件类型进行位运算“|”组成:

    EPOLLIN
        相关文件可用于read(2)操作。

    EPOLLOUT
        相关文件可用于write(2)操作。

    EPOLLRDHUP(自Linux 2.6.17开始)
        流套接字对等封闭连接,或关闭写的一半连接。
        (这个标志对于编写简单的代码特别有用,在使用边缘触发监视时检测对等体关闭。)

    EPOLLPRI
        有可用于read(2)操作的紧急数据。

    EPOLLERR
        关联的文件描述符发生错误情况。
        epoll_wait(2)总是等待这个事件; 没有必要将它设置为事件。

    EPOLLHUP
        在相关的文件描述符上发生挂起。
        epoll_wait(2)总是等待这个事件; 没有必要将它设置为事件。

    EPOLLET
        设置相关文件描述符的边缘触发行为。
        epoll的默认行为是水平触发级别。
        有关Edge和Level Triggered事件分布架构的更多详细信息,请参阅epoll(7)。

    EPOLLONESHOT(自Linux 2.6.2起)
        设置相关文件描述符的单次行为。
        这意味着在用epoll_wait(2)提取事件之后,相关的文件描述符被内部
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值