epoll合集

一、epoll_event

epoll_event 结构体用于在 Linux 中管理异步 I/O 事件。让我们来详细了解一下:

定义

  • epoll_event 结构体指定了内核在相应的文件描述符就绪时应保存并返回的数据。
  • 它的定义如下:
#include <sys/epoll.h>
struct epoll_event {uint32_t events;  // Epoll 事件epoll_data_t data;  // 用户数据变量
};

组成部分

  • events:一个位掩码,表示与文件描述符相关联的事件。这些事件可以包括读就绪、写就绪、错误条件等。
  • data:一个名为 epoll_data 的联合体,包含与事件相关的附加信息。它可以是以下之一:
    • void* ptr:指向用户定义数据的指针。
    • int fd:与事件相关联的文件描述符。
    • uint32_t u32:32 位无符号整数。
    • uint64_t u64:64 位无符号整数。

用法

  • 当文件描述符上发生事件(例如,有数据可读取)时,内核会填充一个 epoll_event 结构体,其中包含相关信息。
  • 应用程序使用 epoll_wait 系统调用等待事件并检索相关的数据。

二、epoll_ctl

epoll_ctl 函数用于向文件描述符 epfd 引用的 epoll 实例执行控制操作。具体而言:

  • epoll_ctl 的作用是在监听事件时告诉内核要进行何种类型的操作(添加、修改或删除)。
  • 它不同于 select(),后者在监听事件时告诉内核要监听哪些类型的事件,而 epoll_ctl 则先注册要监听的事件类型。

以下是 epoll_ctl 函数的参数说明:

  1. epfd:为 epoll 文件描述符。
  2. op:表示动作,使用三个宏来表示:
    1. EPOLL_CTL_ADD:将新的文件描述符注册到 epfd 中。
    2. EPOLL_CTL_MOD:修改已经注册的文件描述符的监听事件。
    3. EPOLL_CTL_DEL:从 epfd 中删除一个文件描述符。
  3. fd:需要监听的文件描述符。
  4. event:告诉内核需要监听的事件,其结构如第一条。

events 可以是以下几个宏的集合:

  • EPOLLIN:表示对应的文件描述符可以读取(包括对端 SOCKET 正常关闭)。
  • EPOLLOUT:表示对应的文件描述符可以写入。
  • EPOLLPRI:表示对应的文件描述符有紧急的数据可读(例如带外数据到来)。
  • EPOLLERR:表示对应的文件描述符发生错误。
  • EPOLLHUP:表示对应的文件描述符被挂断。
  • EPOLLET:将 EPOLL 设为边缘触发(Edge Triggered)模式,相对于水平触发(Level Triggered)。
  • EPOLLONESHOT:只监听一次事件,监听完后需要再次将该文件描述符加入到 EPOLL 队列中。

三、epoll_create

epoll_create 函数用于在 Linux 中创建一个 epoll 实例。让我们详细了解一下:

定义

  • epoll_create 创建一个新的 epoll 实例。
  • 参数 size 表示这个实例需要监听的文件描述符的最大数量。从 Linux 2.6.8 开始,size 参数将被忽略,但必须大于零。
  • epoll_create 返回一个引用新 epoll 实例的文件描述符。这个文件描述符将用于后续所有对 epoll 的调用接口。

用法

  • 在创建 epoll 实例后,可以使用 epoll_ctl 向其添加、修改或删除要监听的文件描述符。
  • 使用 epoll_wait 等待事件并获取准备就绪的文件描述符。

优势

  • epoll 是为解决 Linux 内核处理大量文件描述符而提出的方案。
  • 它属于 Linux 下多路 I/O 复用接口中 select 和 poll 的增强版本。
  • 特别适用于高并发服务型程序,尤其是在大量并发连接中只有少部分连接处于活跃状态的情况。

最大链接数

  • epoll 支持的最大链接数取决于进程最大可打开的文件数目,通常远大于 1024。

四、epoll_wait

epoll_wait 是 Linux 下的一个函数,用于等待事件的发生。它是 epoll 接口的一部分,用于高效地处理大量文件描述符的 I/O 事件。

以下是 epoll_wait 函数的详细描述:

定义

  • epoll_wait 用于等待在 epoll 文件描述符 epfd 上的 I/O 事件。
  • 参数 events 用来从内核获取事件的集合。
  • 参数 maxevents 告知内核这个 events 集合有多大,但不能大于创建 epoll_create 时的 size
  • 参数 timeout 是超时时间(以毫秒为单位)。如果设置为 0,函数会立即返回;如果小于 0,将会永久阻塞。

返回值

  • epoll_wait 返回需要处理的事件数目。如果返回 0,表示已超时。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# 方法

文章目录 1.方法的定义与调用2.方法的参数3.方法参数的赋值4.引用传参5.方法的返回值6.out输出参数7.参数列表8.作用域上期练习题答案本期练习题 1.方法的定义与调用 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Th…

Linux 系统调用函数fork、vfork、clone详解

文章目录 1 fork1.1 基本介绍1.2 fork实例1.2.1多个fork返回值1.2.2 C语言 fork与输出1.2.3 fork &#x1f4a3; 2 vfork2.1 基本介绍2.2 验证vfork共享内存 3 clone3.1 基本介绍3.2 clone使用 1 fork 1.1 基本介绍 #include <sys/types.h> #include <unistd.h>p…

Unity 3D中使用泛型

目录 泛型所提供的好处有以下3点C#提供的泛型机制主要可以分为以下两种形式Mono运行时对泛型机制的优化泛型委托泛型委托中的泛型类型参数可以是以下3种中的其中一种&#xff1a;什么是泛型约束泛型约束一共有6种&#xff1a;泛型中的类型约束的几种形式类型约束的组合合法的约…

PS学习-抠图-蒙版-冰块酒杯等透明物体

选中图&#xff0c;ctrlA 全选 ctrlC复制 创建一个蒙版图层 选中蒙版Alt 点击进入 ctrlv 复制 ctrli 反转 原图层 ctrldelete填充为白色 添加一个背景&#xff0c;这个方法通用 首选创建一个 拖到最底部 给它填充颜色 这个可能是我图片的原因。视频是这样做的

五子棋小游戏(sut实验报告)

实验目的 实现人与人或人与电脑进行五子棋对弈 实验内容 启动游戏&#xff0c;显示游戏参数设置界面&#xff0c;用户输入参数后进入游戏界面&#xff0c;显示棋盘及双方博弈过程&#xff0c;游戏过程中可选择退出游戏。判定一方获胜后结束本局游戏&#xff0c;可选择继续下…

Mysql挂掉怎么办

思路 从库处理&#xff0c;relaylog&#xff0c;讲从库升级主库。 待主机恢复后&#xff0c;主机替换为从库。 具体操作 简介&#xff1a; 主库宕机 Master DOWN机-企业场景一主多从宕机从库切换主继续和从同步过程详解 登陆从库&#xff0c;show processlist; 查看两个线…

20个最佳ChatGPT博客写作提示

20 Best ChatGPT Prompts for Blog Writing 在数字化时代&#xff0c;内容为王&#xff0c;持续产出高质量、吸引人的博客文章是任何作家、营销人员或企业主的重要技能。随着对新鲜和相关性内容的需求不断增长&#xff0c;挑战往往在于生成想法、构建文章结构&#xff0c;并确…

Fiddler抓不到包

fiddler该设置的设置好之后&#xff0c;为啥就是抓不到包 以下都是以谷歌浏览器为例子 方法一&#xff1a; 将fidder证书导入到浏览器&#xff0c;设置搜索证书-->安全-->管理证书 这里可以看到将证书导入之后样子&#xff0c;名字为&#xff1a;DO_NOT_TRUST_Fiddler…

Linux操作系统裸机开发-环境搭建

一、配置SSH服务 1、下载安装ssh服务输入以下命令 sudo apt-get install nfs-kernel-server portmap2、建立一个供SSH服务使用的文件夹如以下命令 mkdir linux 3、完成前两步之后需要将其文件路径放到/etc/exports文件里输入以下命令&#xff1a; sudo vi /etc/esports 4.打…

线性回归 quickstart

构建一元一次方程 100个&#xff08;X, y &#xff09;&#xff0c;大概是’y3x4’ import numpy as npnp.random.seed(42) # to make this code example reproducible m 100 # number of instances X 2 * np.random.rand(m, 1) # column vector y 4 3 * X np.random…

最详细数据仓库项目实现:从0到1的电商数仓建设(数仓部分)

1、数仓 数据仓库是一个为数据分析而设计的企业级数据管理系统&#xff0c;它是一个系统&#xff0c;不是一个框架。可以独立运行的&#xff0c;不需要你参与&#xff0c;只要运行起来就可以自己运行。 数据仓库不是为了存储&#xff08;但是能存&#xff09;&#xff0c;而是…

创业板指399006行情数据API接口

# 测试&#xff1a;返回不超过10条数据&#xff08;2年历史&#xff09; https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399006&order2Python示例 import requestsurl f"https://tsanghi.com/api/fin/index/CHN/daily?tokendemo&ticker399…

EtherCAT 开源主站 IGH 在 linux 开发板的移植和伺服通信测试

手边有一套正点原子linux开发板imax6ul&#xff0c;一直在吃灰&#xff0c;周末业余时间无聊&#xff0c;把EtherCAT的开源IGH主站移植到开发板上玩玩儿&#xff0c;搞点事情做。顺便学习研究下EtherCAT总线协议及其对伺服驱动器的运动控制过程。实验很有意思&#xff0c;这里总…

【JDBC编程】 Java程序操作数据库

目录 一、数据库编程的必备条件 二、什么是JDBC&#xff1f; 三、JDBC的使用 1. 准备工作 2. 建立数据库连接 2.1 加载驱动程序 2.2 数据库连接池技术 3. 正式操作 四、JDBC的局限性与MyBatis的优势 一、数据库编程的必备条件 编程语言&#xff0c;如Java&#xff0…

[M贪心] lc2789. 合并后数组中的最大元素(贪心+思维)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;2789. 合并后数组中的最大元素 2. 题目解析 挺有意思的一道题目。 这里的两数字合并&#xff0c;实际上就是两个数字之和变成了新的数字&#xff0c;再用这个数字和将这两个数字在数组中进行替代。 将这两个…

如何将csv文件转换为markdown表格

要在 Markdown 格式中显示 CSV 文件作为表格&#xff0c;你可以使用 Markdown 表格语法&#xff0c;并根据 CSV 文件的内容构建表格。以下是一个示例 Python 脚本&#xff0c;演示了如何读取 CSV 文件并将其内容转换为 Markdown 表格&#xff1a; import csv# 读取 CSV 文件 c…

创业新手看过来!四招助你开启成功之旅

如果你每个月的薪资仅有几千块&#xff0c;还背负着债务的重担&#xff0c;家中的老少都期盼着你为他们撑起一片天&#xff0c;那么&#xff0c;你每日都可能为了如何打破这一困境而焦虑不安。不过&#xff0c;请稍安勿躁&#xff0c;今天我将为你提供四个建议&#xff0c;或许…

Transformer学习笔记(二)

一、文本嵌入层Embedding 1、作用&#xff1a; 无论是源文本嵌入还是目标文本嵌入&#xff0c;都是为了将文本中词汇的数字表示转变为向量表示&#xff0c;希望在这样的高维空间捕捉词汇间的关系。 二、位置编码器Positional Encoding 1、作用&#xff1a; 因为在Transformer…

解锁区块链游戏数据解决方案

作者&#xff1a;stellafootprint.network 随着区块链技术的日新月异&#xff0c;游戏行业正迎来一场革命&#xff0c;催生了区块链游戏的崛起。这一变革不仅为用户带来了全新的互动体验&#xff0c;也开辟了全新的盈利渠道。然而&#xff0c;在这一新兴领域&#xff0c;数据的…

html--花瓣

代码 <!DOCTYPE html> <html lang"en" ><head> <meta charset"UTF-8"> <title>Petals</title><link rel"stylesheet" href"css/style.css"></head><body><div class"…