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

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

相关文章:

  • 伯努利分布和二项分布学习笔记
  • 线程的概念
  • 跟我学C++中级篇——std::not_fn
  • 消息队列MQ
  • 【初探数据结构】二叉树的顺序结构——堆的实现详解(上下调整算法的时间复杂度分析)
  • 使用位置控件
  • 自动化测试定位元素方法成功率排行
  • PicGo安装与配置-Gitee图床
  • AI工具如何改变编程学习?Trae IDE与Claude 3.5的实践案例
  • JDK 24 发布,新特性解读!
  • 用 Pinia 点燃 Vue 3 应用:状态管理革新之旅
  • STM32F4与串口屏通信
  • C++项目——内存池
  • dockerSDK-Go语言实现
  • dfs刷题排列问题 + 子集问题 + 组和问题总结
  • 【Java SE】单例设计模式
  • TNNLS 2024 | 基于残差超密集网络的高光谱图像空间光谱融合方法
  • 【Java基础】在Java中,一个线程的大小(即线程所占用的内存)是多少
  • 关于FastAPI框架的面试题及答案解析
  • 如何在 Flutter 中使用 WebRTC
  • 于东来再次回应玉石质疑:邀请前往胖东来深入考察,随时欢迎各方调查
  • 以总理:在加沙地带扩大的军事行动将是“高强度”的
  • 成为中国骑手“孵化器”,环球马术冠军赛是最好的历练舞台
  • 习近平给谢依特小学戍边支教西部计划志愿者服务队队员的回信
  • 韩国国民力量党宣布金文洙为该党总统候选人
  • 新华每日电讯头版聚焦上海:科创高地向未来