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

enum EPOLL_EVENTS详解

enum EPOLL_EVENTS 是 Linux 中 epoll 机制的核心定义之一,它定义了 epoll 支持的所有事件类型。每个事件类型对应一个唯一的位掩码(bitmask),通过按位或(|)可以组合多个事件类型,通过按位与(&)可以检查某个事件是否存在。

以下是对 enum EPOLL_EVENTS 中每个事件标志的详细介绍:

1. EPOLLIN

  • 0x001(二进制:0000 0000 0000 0001

  • 含义:文件描述符可读。

  • 使用场景

    • 当文件描述符(如套接字)有数据可读时触发。

    • 例如,客户端发送数据到服务器时,服务器的套接字会触发 EPOLLIN 事件。


2. EPOLLPRI

  • 0x002(二进制:0000 0000 0000 0010

  • 含义:有紧急数据可读。

  • 使用场景

    • 当文件描述符有带外数据(Out-of-Band Data,OOB)时触发。

    • 通常用于 TCP 协议的紧急数据。


3. EPOLLOUT

  • 0x004(二进制:0000 0000 0000 0100

  • 含义:文件描述符可写。

  • 使用场景

    • 当文件描述符(如套接字)可以写入数据时触发。

    • 例如,当套接字的发送缓冲区有空间时,会触发 EPOLLOUT 事件。


4. EPOLLRDNORM

  • 0x040(二进制:0000 0000 0100 0000

  • 含义:普通数据可读。

  • 使用场景

    • 当文件描述符有普通数据可读时触发。

    • 类似于 EPOLLIN,但更具体地表示普通数据。


5. EPOLLRDBAND

  • 0x080(二进制:0000 0000 1000 0000

  • 含义:优先带数据可读。

  • 使用场景

    • 当文件描述符有优先带数据(Priority Band Data)可读时触发。

    • 通常用于流式套接字(如 TCP)。


6. EPOLLWRNORM

  • 0x100(二进制:0000 0001 0000 0000

  • 含义:普通数据可写。

  • 使用场景

    • 当文件描述符可以写入普通数据时触发。

    • 类似于 EPOLLOUT,但更具体地表示普通数据。


7. EPOLLWRBAND

  • 0x200(二进制:0000 0010 0000 0000

  • 含义:优先带数据可写。

  • 使用场景

    • 当文件描述符可以写入优先带数据时触发。

    • 通常用于流式套接字(如 TCP)。


8. EPOLLMSG

  • 0x400(二进制:0000 0100 0000 0000

  • 含义:有消息可读。

  • 使用场景

    • 当文件描述符有消息可读时触发。

    • 通常用于特定的协议或场景。


9. EPOLLERR

  • 0x008(二进制:0000 0000 0000 1000

  • 含义:文件描述符发生错误。

  • 使用场景

    • 当文件描述符发生错误时触发。

    • 例如,套接字连接断开或发生协议错误。


10. EPOLLHUP

  • 0x010(二进制:0000 0000 0001 0000

  • 含义:文件描述符挂起。

  • 使用场景

    • 当文件描述符被挂起时触发。

    • 例如,对端关闭连接时,会触发 EPOLLHUP 事件。


11. EPOLLRDHUP

  • 0x2000(二进制:0000 0010 0000 0000

  • 含义:对端关闭连接或半关闭。

  • 使用场景

    • 当对端关闭连接或半关闭时触发。

    • 需要内核版本 2.6.17 以上支持。


12. EPOLLEXCLUSIVE

  • 1u << 28(二进制:0001 0000 0000 0000 0000 0000 0000 0000

  • 含义:独占唤醒模式。

  • 使用场景

    • 当多个线程监听同一个 epoll 实例时,只有一个线程会被唤醒。

    • 用于避免“惊群效应”(Thundering Herd Problem)。


13. EPOLLWAKEUP

  • 1u << 29(二进制:0010 0000 0000 0000 0000 0000 0000 0000

  • 含义:唤醒事件。

  • 使用场景

    • 用于防止系统进入休眠状态。

    • 当事件触发时,系统会保持唤醒状态。


14. EPOLLONESHOT

  • 1u << 30(二进制:0100 0000 0000 0000 0000 0000 0000 0000

  • 含义:一次性事件。

  • 使用场景

    • 当事件触发后,文件描述符会从 epoll 实例中移除。

    • 需要重新添加到 epoll 实例中才能继续监听。


15. EPOLLET

  • 1u << 31(二进制:1000 0000 0000 0000 0000 0000 0000 0000

  • 含义:边缘触发模式。

  • 使用场景

    • 当文件描述符的状态发生变化时触发事件。

    • 默认是水平触发模式(Level-Triggered),边缘触发模式(Edge-Triggered)需要显式设置。

16. 组合事件类型

通过按位或(|)可以组合多个事件类型。例如:

struct epoll_event ev;
ev.events = EPOLLIN | EPOLLOUT | EPOLLET; // 监听可读、可写事件,并使用边缘触发模式

17. 检查事件类型

通过按位与(&)可以检查某个事件是否存在。例如:

if (events[i].events & EPOLLIN) {// 处理可读事件
}
if (events[i].events & EPOLLERR) {// 处理错误事件
}

18. 总结

  • enum EPOLL_EVENTS 定义了 epoll 支持的所有事件类型。

  • 每个事件类型对应一个唯一的位掩码,可以通过按位或组合多个事件类型,通过按位与检查某个事件是否存在。

  • 常用的事件类型包括 EPOLLINEPOLLOUTEPOLLERREPOLLHUP 和 EPOLLET

  • 通过合理使用这些事件类型,可以实现高效的事件驱动编程。

相关文章:

enum EPOLL_EVENTS详解

enum EPOLL_EVENTS 是 Linux 中 epoll 机制的核心定义之一&#xff0c;它定义了 epoll 支持的所有事件类型。每个事件类型对应一个唯一的位掩码&#xff08;bitmask&#xff09;&#xff0c;通过按位或&#xff08;|&#xff09;可以组合多个事件类型&#xff0c;通过按位与&am…...

阿里前端开发规范

文章目录 1. 为什么前端写代码要规范&#xff1f;一、代码规范的必要性二、 规范带来的好处 2. 资源一、推荐 1. 为什么前端写代码要规范&#xff1f; 一、代码规范的必要性 可维护性 统一的代码风格便于理解和修改减少代码维护成本降低项目交接难度 团队协作 提高团队开发效…...

从函数式编程到响应式编程:现代开发中的范式转变

引言 随着软件开发领域的不断进化&#xff0c;编程范式也在经历着一场又一场的变革。从面向过程到面向对象&#xff0c;再到近年来流行的函数式编程和响应式编程&#xff0c;开发者正逐步适应不同的编程思想来解决现代软件开发中的复杂问题。本文将带你了解函数式编程和响应式编…...

Django学习笔记(启动项目)-03

Django学习笔记(启动项目)-03 1、在urls文件中配置一个路由url 2、在views文件中创建视图函数 3、启动项目测试结果 # 输入项目启动命令 python manage.py runserver4、创建HTML模版和静态文件 1、在templates文件夹中创建一个html 2、创建url路由与视图函数 3、测试效果 4、…...

量变引起质变

量变引起质变&#xff0c;这个是最本质的规律&#xff0c;重复进行一件事情&#xff0c;这件事情就会越来越完善&#xff0c;越来越完美&#xff0c;哪怕是菜鸟&#xff0c;重复多了就是大佬。 我从说话结结巴巴&#xff0c;到说话流畅&#xff0c;只是用了15天直播写代码&…...

NewStar CTF week1 web wp

谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id&#xff0c;是一个占位符&#xff0c;按第二列排序用来测试列数&#xff0c;如果没有两列则会报错-1 union select 1,2 -1同样是占位符&#xff0c;union的作用是将注入语句合并到原始语句…...

李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕

终端输入nvidia-smi查看cuda版本 我的是12.5&#xff0c;在网上没有找到12.5的torch&#xff0c;就安装12.1的。torch&#xff0c;torchvision&#xff0c;torchaudio版本以及python版本要对应 参考&#xff1a;https://blog.csdn.net/FengHanI/article/details/135116114 创…...

深度学习中Batch Normalization(BN)原理、作用浅析

最近做剪枝学习&#xff0c;其中一种是基于BN层的γ作为缩放因子进行剪枝的&#xff0c;那么我想搞懂BN的工作原理更好的理解网络、剪枝等&#xff0c;所以有了该文。 首先先说BN的作用在详细拆解&#xff0c;理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…...

C语言常用字符串处理函数

头文件&#xff1a;#include <string.h> strlen size_t strlen( char *str ); 功能&#xff1a;函数返回一个整数值&#xff0c;表示给定字符串的长度&#xff08;不包括结束符\0&#xff09; strcat char *strcat( char *str1, const char *str2 )&#xff1b; 功能&a…...

文件上传漏洞详解

第一关&#xff08;JS绕过&#xff09; 1.1使用bp进行绕过 先将要上传的php文件的后缀改为png&#xff0c;然后在上传时抓包&#xff0c;将png后缀再改为php&#xff0c;发包&#xff0c;此时上传成功 1.2使用js进行绕过 打开浏览器的检查&#xff0c;将其中的checkFile函数…...

关于linux的ld.so.conf.d

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

pytest执行报错:found no collectors

今天在尝试使用pytest运行用例的时候出现报错&#xff1a;found no collectors&#xff1b;从两个方向进行排查&#xff0c;一是看文件名和函数名是不是符合规范&#xff0c;命名要是"test_*"格式&#xff1b;二是是否存在修改文件名的情况&#xff0c;如果修改过文件…...

如何实现网页不用刷新也能更新

要实现用户在网页上不用刷新也能到下一题&#xff0c;可以使用 前端和后端交互的技术&#xff0c;比如 AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;、Fetch API 或 WebSocket 来实现局部页面更新。以下是一个实现思路&#xff1a; 1. 使用前端 AJAX 或 Fetch…...

c#调用c++的dll,字符串指针参数问题

一.背景 在 C# 中没有 char* 类型&#xff0c;因为 C# 是一种托管语言&#xff0c;它的设计目标是提供更高级别的安全性和内存管理&#xff0c;避免使用像 C 或 C 中的指针操作&#xff0c;以防止常见的指针相关错误&#xff0c;如内存泄漏和悬空指针。 二.c#调用c的dll&#x…...

HTML5 新表单属性详解

HTML5 为 <form> 和 <input> 标签引入了一系列新属性&#xff0c;极大地增强了表单的功能和用户体验。这些新属性不仅简化了开发者的工作&#xff0c;还为用户提供了更友好、更高效的交互方式。本文将详细介绍这些新属性&#xff0c;并结合代码示例帮助大家更好地理…...

JAVA 使用反射比较对象属性的变化,记录修改日志。使用注解【策略模式】,来进行不同属性枚举值到中英文描述的切换,支持前端国际化。

1.首先定义一个接口&#xff0c;接口中有两个方法&#xff0c;分别是将属性转换成英文描述和中文描述。 其实就是将数据库中记录的 0 1 &#xff0c;转换成后面的描述 这边定义了中文转换为默认方法&#xff0c;是因为有些属性不需要进行中文转换&#xff0c;或者该属性的枚举…...

Docker入门学习

一、容器 1. 将单个操作系统中的资源划分到孤立的组中&#xff0c;在孤立的组中平衡有冲突的资源使用需求 2. Docker提供了容器管理的工具可以无需关注底层操作&#xff0c;使用效果类似于轻量级的虚拟机&#xff0c; 并且容器的创建和停止相对于虚拟机来说比较快&am…...

吴恩达深度学习——神经网络介绍

文章内容来自BV11H4y1F7uH&#xff0c;仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集&#xff0c;横轴为房子大小&#xff0c;纵轴为房子…...

STM32之CubeMX新建工程操作(十八)

STM32F407 系列文章 - STM32CubeMX&#xff08;十八&#xff09; 目录 前言 一、STM32CubeMX 二、新建工程 ​编辑 1.创建工程 2.选择芯片型号 3.Pinout引脚分配 1.SYS配置 2.RCC配置 3.定时器配置 4.GPIO引脚配置 5.中断配置 6.通讯接口配置 7.插件Middleware配…...

Postgresql源码(140)理解PG的编译流程(make、Makefile、Makefile.global.in)

PG16 PG中使用的makefile看起来代码比较多&#xff0c;但是实际逻辑比较简单&#xff0c;这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target&#xff0c;可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...