epoll函数

头文件

#include 

epoll_create函数 

        该函数用于创建一个 epoll 实例,返回一个文件描述符,后续的 epoll 操作会使用这个文件描述符。

函数原型

int epoll_create(int flags);

参数

        flags:可以传入 0 或者 EPOLL_CLOEXEC。当传入 EPOLL_CLOEXEC 时,在执行 exec 系列函数时会自动关闭该文件描述符,防止子进程继承。若传入 0,则无此特性。

返回值

        成功时返回一个新的 epoll 实例的文件描述符。

        失败时返回 -1,并设置 errno 来指示错误类型。

epoll_ctl函数

        对 epoll 实例进行控制操作,比如添加、修改或删除要监控的文件描述符及其对应的事件。

函数原型

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

参数

        epfdepoll_create1返回的 epoll 实例的文件描述符。

        op:指定操作类型,有以下三种取值:

                EPOLL_CTL_ADD:将文件描述符 fd 加入到 epoll 实例的监控列表中。

                EPOLL_CTL_MOD:修改已经在 epoll 实例监控列表中的文件描述符 fd 对应的事件。

                EPOLL_CTL_DEL:将文件描述符 fd 从 epoll 实例的监控列表中移除。

        fd:要进行操作的文件描述符。

        event:指向 struct epoll_event 结构体的指针,用于指定要监控的事件类型。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 events */
    epoll_data_t data;        /* User data variable */
};

        events 可以是以下一些常用事件标志的组合:

                EPOLLIN:表示对应的文件描述符可读(有数据可读)。

                EPOLLOUT:表示对应的文件描述符可写(可以写入数据)。

                EPOLLET:将 epoll 设置为边缘触发(Edge Triggered)模式,默认是水平触发(Level Triggered)模式。 

        data 是一个联合体,通常会使用 fd 成员来存储要监控的文件描述符。

返回值

        成功时返回 0

        失败时返回 -1,并设置 errno 来指示错误类型。

epoll_wait函数

         等待 epoll 实例中监控的文件描述符上的事件发生。当有事件发生时,该函数会返回发生事件的文件描述符数量,并将这些事件的信息存储在 events 数组中。    

函数原型

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

参数

        epfdepoll_create1 返回的 epoll 实例的文件描述符。

        events:用于存储发生事件的 struct epoll_event 结构体数组。

        maxeventsevents 数组的最大元素个数,即最多能存储的事件数量。

        timeout:超时时间,单位为毫秒。有以下几种取值情况:

                -1:表示无限等待,直到有事件发生。

                0:表示立即返回,不管是否有事件发生。

                大于 0:表示等待指定的毫秒数,如果在这段时间内没有事件发生,则返回 0

返回值

        成功时返回发生事件的文件描述符数量。

        超时且无事件发生时返回 0

        失败时返回 -1,并设置 errno 来指示错误类型。

你可能感兴趣的:(Linux编程,服务器,c++,linux)