epoll成员函数介绍
epoll_create1
epoll_create1
是 Linux 系统中用于创建一个新的 epoll
实例的系统调用。epoll
是一种高效的 I/O 事件通知机制,常用于处理大量的文件描述符(如套接字)。epoll_create1
是 epoll_create
的改进版本,提供了更多的灵活性。
函数原型
int epoll_create1(int flags);
参数说明
-
flags
-
类型:
int
-
描述: 用于指定创建
epoll
实例时的行为。可以是以下值的组合:
0
: 默认行为,等同于epoll_create
。EPOLL_CLOEXEC
: 设置epoll
文件描述符的 close-on-exec 标志。这意味着当进程执行exec
系列函数时,epoll
文件描述符会自动关闭。
-
返回值
- 成功
- 返回一个新的
epoll
文件描述符(epollFd
),用于后续的epoll_ctl
和epoll_wait
操作。
- 返回一个新的
- 失败
- 返回
-1
,并设置errno
以指示错误类型。
- 返回
例子
int epollFd = epoll_create1(0); // 创建epoll实例
epoll_ctl
epoll_ctl
是 Linux 系统中用于控制 epoll
实例的系统调用。epoll
是一种高效的 I/O 事件通知机制,常用于处理大量的文件描述符(如套接字)。epoll_ctl
用于向 epoll
实例中添加、修改或删除文件描述符及其相关事件。
函数原型
int epoll_ctl(int epollFd, int op, int fd, struct epoll_event *event);
参数说明
epollFd
:- 类型:
int
- 描述: 这是
epoll
实例的文件描述符。它通常是通过epoll_create
或epoll_create1
创建的。
- 类型:
op
:- 类型:
int
- 描述: 指定要执行的操作。可以是以下值之一:
EPOLL_CTL_ADD
: 向epoll
实例中添加一个新的文件描述符。EPOLL_CTL_MOD
: 修改已注册的文件描述符的事件。EPOLL_CTL_DEL
: 从epoll
实例中删除一个文件描述符。
- 类型:
fd
:- 类型:
int
- 描述: 这是要操作的文件描述符。例如,如果是一个服务器套接字,
fd
就是服务器套接字的文件描述符。
- 类型:
event
:- 类型:
struct epoll_event *
- 描述: 这是一个指向
epoll_event
结构的指针,用于指定要监控的事件类型和相关的用户数据。
- 类型:
sruct epoll_event
结构
struct epoll_event {
uint32_t events; // 事件类型
epoll_data_t data; // 用户数据
};
events
:- 类型:
uint32_t
- 描述: 指定要监控的事件类型。可以是以下值的组合:
EPOLLIN
: 文件描述符可读。EPOLLOUT
: 文件描述符可写。EPOLLRDHUP
: 对端关闭连接或关闭了写操作。EPOLLPRI
: 有紧急数据可读。EPOLLERR
: 发生错误。EPOLLHUP
: 挂起。EPOLLET
: 使用边缘触发模式(默认是水平触发模式)。EPOLLONESHOT
: 只监控一次事件,事件发生后需要重新注册。
- 类型:
例子
epoll_ctl(epollFd, EPOLL_CTL_ADD, serverFd, &event); //添加监视对象
epoll_wait
epoll_wait
是 Linux 系统中用于等待 epoll
实例中注册的文件描述符上发生事件的系统调用。它是 epoll
机制的核心函数之一,用于实现高效的 I/O 事件驱动模型。
函数原型
int epoll_wait(int epollFd, struct epoll_event *events, int maxevents, int timeout);
参数说明
epollFd
:- 类型:
int
- 描述: 这是
epoll
实例的文件描述符,通常是通过epoll_create1
或epoll_create
创建的。
- 类型:
events
:- 类型:
struct epoll_event
- 描述: 这是一个指向
epoll_event
结构数组的指针,用于存储发生的事件。每个epoll_event
结构包含事件类型和相关的用户数据。
- 类型:
maxevents
:- 类型:
int
- 描述: 这是
events
数组的大小,即最多可以返回的事件数量。必须大于 0。
- 类型:
timeout
:- 类型:
int
- 描述: 指定等待事件的超时时间(以毫秒为单位)。可以是以下值之一:
-1
: 无限等待,直到有事件发生。0
: 立即返回,即使没有事件发生。> 0
: 等待指定的毫秒数,超时后返回。
- 类型:
返回值
- 成
- 返回发生事件的文件描述符数量。这些事件会被存储在
events
数组中。
- 返回发生事件的文件描述符数量。这些事件会被存储在
- 失败
- 返回
-1
,并设置errno
以指示错误类型。
- 返回
例子
int n = epoll_wait(epollFd, events.data(), events.size(), -1); // 等待事件