当前位置: 首页 > article >正文

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); // 等待事件

http://www.kler.cn/a/595524.html

相关文章:

  • 蓝桥每日打卡--区间移位
  • 在Ubuntu20.04上交叉编译能在Windows上运行的Qt5应用
  • AI大白话(三):深度学习——AI的‘大脑‘是如何构建的?
  • 【机密计算顶会解读】11:ACAI——使用 Arm 机密计算架构保护加速器执行
  • 四种事件类型
  • Blender模型旋转动画制作
  • C++异常处理时的异常类型抛出选择
  • 一文速通Python并行计算:00 并行计算的基本概念
  • 3.8、密钥管理与应用
  • Ambari湖仓集成怎么选?Hudi,Iceberg,Paimon
  • 牛贝跟卖软件Niubox如何上架产品?
  • 【高并发内存池】第三弹---构建Central Cache的全方位指南——从整体设计到核心实现
  • Word中公式自动标号带章节编号
  • QT日志级别设置
  • 1.无穷小的比较
  • fastapi+angular实现菜鸟驿站系统
  • Bell-1量子计算机分析:开启量子计算2.0时代的创新引擎
  • 音视频系列——Websockets接口封装为Http接口
  • 《沉思录》
  • 计算机四级 - 数据库原理(操作系统部分)- 第3章「进程线程模型」