音乐版权购买网站新东方烹饪培训学校
头文件
#include <sys/epoll.h>
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);
参数
epfd:epoll_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);
参数
epfd:epoll_create1返回的epoll实例的文件描述符。
events:用于存储发生事件的struct epoll_event结构体数组。
maxevents:events数组的最大元素个数,即最多能存储的事件数量。
timeout:超时时间,单位为毫秒。有以下几种取值情况:
-1:表示无限等待,直到有事件发生。
0:表示立即返回,不管是否有事件发生。大于
0:表示等待指定的毫秒数,如果在这段时间内没有事件发生,则返回0。
返回值
成功时返回发生事件的文件描述符数量。
超时且无事件发生时返回 0。
失败时返回 -1,并设置 errno 来指示错误类型。
