epoll成员函数介绍

epoll_create1

epoll_create1 是 Linux 系统中用于创建一个新的 epoll 实例的系统调用。epoll 是一种高效的 I/O 事件通知机制,常用于处理大量的文件描述符(如套接字)。epoll_create1epoll_create 的改进版本,提供了更多的灵活性。

函数原型

int epoll_create1(int flags);

参数说明

  1. flags

    • 类型: int

    • 描述: 用于指定创建

      epoll
      

      实例时的行为。可以是以下值的组合:

      • 0: 默认行为,等同于 epoll_create
      • EPOLL_CLOEXEC: 设置 epoll 文件描述符的 close-on-exec 标志。这意味着当进程执行 exec 系列函数时,epoll 文件描述符会自动关闭。

返回值

  • 成功
    • 返回一个新的 epoll 文件描述符(epollFd),用于后续的 epoll_ctlepoll_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);

参数说明

  1. epollFd:
    • 类型: int
    • 描述: 这是 epoll 实例的文件描述符。它通常是通过 epoll_createepoll_create1 创建的。
  2. op:
    • 类型: int
    • 描述: 指定要执行的操作。可以是以下值之一:
      • EPOLL_CTL_ADD: 向 epoll 实例中添加一个新的文件描述符。
      • EPOLL_CTL_MOD: 修改已注册的文件描述符的事件。
      • EPOLL_CTL_DEL: 从 epoll 实例中删除一个文件描述符。
  3. fd:
    • 类型: int
    • 描述: 这是要操作的文件描述符。例如,如果是一个服务器套接字,fd 就是服务器套接字的文件描述符。
  4. 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);

参数说明

  1. epollFd:
    • 类型: int
    • 描述: 这是 epoll 实例的文件描述符,通常是通过 epoll_create1epoll_create 创建的。
  2. events:
    • 类型: struct epoll_event
    • 描述: 这是一个指向 epoll_event 结构数组的指针,用于存储发生的事件。每个 epoll_event 结构包含事件类型和相关的用户数据。
  3. maxevents:
    • 类型: int
    • 描述: 这是 events 数组的大小,即最多可以返回的事件数量。必须大于 0。
  4. timeout:
    • 类型: int
    • 描述: 指定等待事件的超时时间(以毫秒为单位)。可以是以下值之一:
      • -1: 无限等待,直到有事件发生。
      • 0: 立即返回,即使没有事件发生。
      • > 0: 等待指定的毫秒数,超时后返回。

返回值

    • 返回发生事件的文件描述符数量这些事件会被存储在 events 数组中
  • 失败
    • 返回 -1,并设置 errno 以指示错误类型。

例子

int n = epoll_wait(epollFd, events.data(), events.size(), -1); // 等待事件

你可能感兴趣的:(Linux,服务器,c++,开发语言)