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

epoll函数

头文件

#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);

参数

        epfdepoll_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);

参数

        epfdepoll_create1 返回的 epoll 实例的文件描述符。

        events:用于存储发生事件的 struct epoll_event 结构体数组。

        maxeventsevents 数组的最大元素个数,即最多能存储的事件数量。

        timeout:超时时间,单位为毫秒。有以下几种取值情况:

                -1:表示无限等待,直到有事件发生。

                0:表示立即返回,不管是否有事件发生。

                大于 0:表示等待指定的毫秒数,如果在这段时间内没有事件发生,则返回 0

返回值

        成功时返回发生事件的文件描述符数量。

        超时且无事件发生时返回 0

        失败时返回 -1,并设置 errno 来指示错误类型。

相关文章:

  • 【Shell 脚本编程】详细指南:第四章 - 循环结构(for、while、until) 深度解析
  • 60常用控件_QSpinBox的使用
  • 排序算法——冒泡排序
  • C语言学习之动态内存的管理
  • 交我算使用保姆教程:在计算中心利用singularity容器训练深度学习模型
  • caffe适配cudnn9.6.0(ai修改代码踩坑)
  • synchronized与Lock深度对比
  • 随机森林实战:从原理到垃圾邮件分类
  • Windows下Python3脚本传到Linux下./example.py执行失败
  • AdaBoost算法详解:原理、实现与应用指南
  • 极简GIT使用
  • 补4月30日
  • 常见电源的解释说明
  • C#泛型集合深度解析(九):掌握System.Collections.Generic的核心精髓
  • RTOS接口-Semaphores
  • ADG网络故障恢复演练
  • 实现了一个基于寄存器操作STM32F103C8t6的工程, 并实现对PA1,PA2接LED正极的点灯操作
  • 如何提升个人的稳定性?
  • 蓝桥杯比赛
  • 基于BERT类的MRPC语义相似度检测(从0到-1系列)
  • 我国首个少数民族非遗纺织类国标正式实施
  • 安徽六安特色产品将“组团”入沪,借力五五购物节开拓市场
  • 陈逸飞《黄河颂》人物造型与借鉴影像意义
  • 美国经济萎缩意味着什么?关税政策如何反噬经济?
  • 从“长绳系日”特展看韩天衡求艺之路
  • 奈雪的茶叫停“能喝奶茶就不要喝水”宣传,当地市监称不要误导消费者