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支持的所有事件类型。 -
每个事件类型对应一个唯一的位掩码,可以通过按位或组合多个事件类型,通过按位与检查某个事件是否存在。
-
常用的事件类型包括
EPOLLIN、EPOLLOUT、EPOLLERR、EPOLLHUP和EPOLLET。 -
通过合理使用这些事件类型,可以实现高效的事件驱动编程。
相关文章:
enum EPOLL_EVENTS详解
enum EPOLL_EVENTS 是 Linux 中 epoll 机制的核心定义之一,它定义了 epoll 支持的所有事件类型。每个事件类型对应一个唯一的位掩码(bitmask),通过按位或(|)可以组合多个事件类型,通过按位与&am…...
阿里前端开发规范
文章目录 1. 为什么前端写代码要规范?一、代码规范的必要性二、 规范带来的好处 2. 资源一、推荐 1. 为什么前端写代码要规范? 一、代码规范的必要性 可维护性 统一的代码风格便于理解和修改减少代码维护成本降低项目交接难度 团队协作 提高团队开发效…...
从函数式编程到响应式编程:现代开发中的范式转变
引言 随着软件开发领域的不断进化,编程范式也在经历着一场又一场的变革。从面向过程到面向对象,再到近年来流行的函数式编程和响应式编程,开发者正逐步适应不同的编程思想来解决现代软件开发中的复杂问题。本文将带你了解函数式编程和响应式编…...
Django学习笔记(启动项目)-03
Django学习笔记(启动项目)-03 1、在urls文件中配置一个路由url 2、在views文件中创建视图函数 3、启动项目测试结果 # 输入项目启动命令 python manage.py runserver4、创建HTML模版和静态文件 1、在templates文件夹中创建一个html 2、创建url路由与视图函数 3、测试效果 4、…...
量变引起质变
量变引起质变,这个是最本质的规律,重复进行一件事情,这件事情就会越来越完善,越来越完美,哪怕是菜鸟,重复多了就是大佬。 我从说话结结巴巴,到说话流畅,只是用了15天直播写代码&…...
NewStar CTF week1 web wp
谢谢皮蛋 做这题之前需要先去学习一些数据库的知识 1 order by 2 1可以理解为输入的id,是一个占位符,按第二列排序用来测试列数,如果没有两列则会报错-1 union select 1,2 -1同样是占位符,union的作用是将注入语句合并到原始语句…...
李沐vscode配置+github管理+FFmpeg视频搬运+百度API添加翻译字幕
终端输入nvidia-smi查看cuda版本 我的是12.5,在网上没有找到12.5的torch,就安装12.1的。torch,torchvision,torchaudio版本以及python版本要对应 参考:https://blog.csdn.net/FengHanI/article/details/135116114 创…...
深度学习中Batch Normalization(BN)原理、作用浅析
最近做剪枝学习,其中一种是基于BN层的γ作为缩放因子进行剪枝的,那么我想搞懂BN的工作原理更好的理解网络、剪枝等,所以有了该文。 首先先说BN的作用在详细拆解,理解。以知乎一条高赞评论说明BN层到底在干什么。 Batch Norm 为什…...
C语言常用字符串处理函数
头文件:#include <string.h> strlen size_t strlen( char *str ); 功能:函数返回一个整数值,表示给定字符串的长度(不包括结束符\0) strcat char *strcat( char *str1, const char *str2 ); 功能&a…...
文件上传漏洞详解
第一关(JS绕过) 1.1使用bp进行绕过 先将要上传的php文件的后缀改为png,然后在上传时抓包,将png后缀再改为php,发包,此时上传成功 1.2使用js进行绕过 打开浏览器的检查,将其中的checkFile函数…...
关于linux的ld.so.conf.d
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
pytest执行报错:found no collectors
今天在尝试使用pytest运行用例的时候出现报错:found no collectors;从两个方向进行排查,一是看文件名和函数名是不是符合规范,命名要是"test_*"格式;二是是否存在修改文件名的情况,如果修改过文件…...
如何实现网页不用刷新也能更新
要实现用户在网页上不用刷新也能到下一题,可以使用 前端和后端交互的技术,比如 AJAX(Asynchronous JavaScript and XML)、Fetch API 或 WebSocket 来实现局部页面更新。以下是一个实现思路: 1. 使用前端 AJAX 或 Fetch…...
c#调用c++的dll,字符串指针参数问题
一.背景 在 C# 中没有 char* 类型,因为 C# 是一种托管语言,它的设计目标是提供更高级别的安全性和内存管理,避免使用像 C 或 C 中的指针操作,以防止常见的指针相关错误,如内存泄漏和悬空指针。 二.c#调用c的dll&#x…...
HTML5 新表单属性详解
HTML5 为 <form> 和 <input> 标签引入了一系列新属性,极大地增强了表单的功能和用户体验。这些新属性不仅简化了开发者的工作,还为用户提供了更友好、更高效的交互方式。本文将详细介绍这些新属性,并结合代码示例帮助大家更好地理…...
JAVA 使用反射比较对象属性的变化,记录修改日志。使用注解【策略模式】,来进行不同属性枚举值到中英文描述的切换,支持前端国际化。
1.首先定义一个接口,接口中有两个方法,分别是将属性转换成英文描述和中文描述。 其实就是将数据库中记录的 0 1 ,转换成后面的描述 这边定义了中文转换为默认方法,是因为有些属性不需要进行中文转换,或者该属性的枚举…...
Docker入门学习
一、容器 1. 将单个操作系统中的资源划分到孤立的组中,在孤立的组中平衡有冲突的资源使用需求 2. Docker提供了容器管理的工具可以无需关注底层操作,使用效果类似于轻量级的虚拟机, 并且容器的创建和停止相对于虚拟机来说比较快&am…...
吴恩达深度学习——神经网络介绍
文章内容来自BV11H4y1F7uH,仅为个人学习所用。 文章目录 什么是神经网络引入神经网络神经元激活函数ReLU隐藏单元 用神经网络进行监督学习监督学习与无监督学习举例 什么是神经网络 引入 已经有六个房子的数据集,横轴为房子大小,纵轴为房子…...
STM32之CubeMX新建工程操作(十八)
STM32F407 系列文章 - STM32CubeMX(十八) 目录 前言 一、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看起来代码比较多,但是实际逻辑比较简单,这里做一些抽象总结。 总结 Makefile.global.in的$(recurse)宏自动生成了target,可以方便的进入内存目录进行编译。 all: all-common-recurse all-common-recurse: submak…...
告别激光雷达?手把手复现ST-P3:一个纯视觉的端到端自动驾驶模型(附避坑指南)
纯视觉自动驾驶实战:从零复现ST-P3模型的完整指南 当特斯拉在2021年宣布取消所有车型的雷达传感器时,整个行业都在质疑纯视觉方案的可靠性。然而ST-P3论文的发表,为这一技术路线提供了新的理论支撑。本文将带你深入这个前沿模型的实现细节&am…...
3步搞定精准歌词:LDDC歌词工具全方位解决方案
3步搞定精准歌词:LDDC歌词工具全方位解决方案 【免费下载链接】LDDC 简单易用的精准歌词(逐字歌词/卡拉OK歌词)下载匹配工具|A simple and user-friendly tool for downloading and matching precise lyrics (word-by-word lyrics/Karaoke lyrics) 项目地址: http…...
AI专著写作全流程:专业工具深度剖析,助你顺利完成大作
学术专著写作挑战与AI工具助力 对于许多学者而言,撰写学术专著最大的挑战,往往就是“有限的时间”与“无限的期望”的矛盾。完成一部专著通常需要3到5年,甚至更长的时间,而学者们还得兼顾教学、科研项目以及学术交流等多重责任&a…...
HSTracker终极指南:如何快速上手macOS炉石套牌追踪器
HSTracker终极指南:如何快速上手macOS炉石套牌追踪器 【免费下载链接】HSTracker A deck tracker and deck manager for Hearthstone on macOS 项目地址: https://gitcode.com/gh_mirrors/hs/HSTracker HSTracker是一款专为macOS玩家打造的炉石传说套牌追踪与…...
Batocera.linux主题定制完全指南:打造个性化游戏界面终极教程
Batocera.linux主题定制完全指南:打造个性化游戏界面终极教程 【免费下载链接】batocera.linux batocera.linux 项目地址: https://gitcode.com/gh_mirrors/ba/batocera.linux Batocera.linux是一款强大的开源复古游戏系统,让用户能够在各种硬件上…...
OpenCore Legacy Patcher:让旧Mac重获新生的完整方案
OpenCore Legacy Patcher:让旧Mac重获新生的完整方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 当您的Mac被官方系统更新拒之门外时…...
如何用BiliTools实现B站视频智能学习:从信息焦虑到知识掌控的转变
如何用BiliTools实现B站视频智能学习:从信息焦虑到知识掌控的转变 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliT…...
告别信号焦虑:你的手机是如何通过载波聚合(CA)实现网速翻倍的?
告别信号焦虑:你的手机是如何通过载波聚合(CA)实现网速翻倍的? 站在地铁站台刷短视频突然卡成PPT,商场负一层扫码支付转圈半分钟——这些让人抓狂的场景背后,其实藏着运营商和手机厂商正在悄悄部署的"…...
零售AI实战:Ostrakon-VL-8B应用案例,智能分析商品种类、数量与陈列效果
零售AI实战:Ostrakon-VL-8B应用案例,智能分析商品种类、数量与陈列效果 1. 零售视觉分析的挑战与机遇 在零售行业,商品陈列和库存管理是影响销售的关键因素。传统的人工巡检方式存在效率低、成本高、主观性强等问题。以一个中型超市为例&am…...
【MATLAB源码-第320期】基于matlab的混沌序列图像加密解密系统仿真,测试加解密速度、资源占用、模糊攻击测试、密钥空间和敏感性分析。
操作环境:MATLAB 2024a1、算法描述基于混沌序列的图像加密 与解密系统 随着数字信息技术的迅速发展,图像作为信息载体的使用越来越广泛。然而,图像数据在传输和存储过程中容易受到窃取、篡改或破坏,因此确保图像数据的安全性显得尤…...
