poll函数和epoll函数族

news2024/11/28 0:17:26

一、IO多路复用

二、多路复用的实现方式

select函数

int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct timeval *timeout);

poll函数

int poll(struct pollfd *fds, nfds_t nfds, int timeout);

epoll 函数族

epoll_create

epoll_wait

epoll_ctl

三、poll函数

poll函数 :事件类型

        events:

        POLLIN:有数据可读

        POLLPRI:有紧急数据需要读取

        POLLOUT: 文件可写

        .....

四、epoll函数族

1./*创建epoll句柄*/

int epoll_create(int size);  //size参数实际上已经被弃用

2./*epoll句柄的控制接口*/

int epoll_ctl(int epfd, int op, int fd,  struct epoll_event *event);

epfd: epoll 专用的文件描述符,epoll_create()的返回值

op: 表示动作,用三个宏来表示:

    EPOLL_CTL_ADD:注册新的 fd 到 epfd 中;

    EPOLL_CTL_MOD:修改已经注册的fd的监听事件;

    EPOLL_CTL_DEL:从 epfd 中删除一个 fd;

fd: 需要监听的文件描述符

event: 告诉内核要监听什么事件

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 */

};

EPOLLIN :表示对应的文件描述符可以读(包括对端 SOCKET 正常关闭);

EPOLLOUT:表示对应的文件描述符可以写;

EPOLLPRI:表示对应的文件描述符有紧急的数据可读(这里应该表示有带外数据到来);

EPOLLERR:表示对应的文件描述符发生错误;

EPOLLHUP:表示对应的文件描述符被挂断;

EPOLLET :将 EPOLL 设为边缘触发(Edge Trigger)模式,这是相对于水平触发(Level Trigger)来说的。

EPOLLONESHOT:只监听一次事件,当监听完这次事件之后,如果还需要继续监听这个 socket 的话,需要再次把这个 socket 加入到 EPOLL 队列里

3./*等待 epoll 文件描述符上的 I/O 事件*/

int epoll_wait(int epfd, struct epoll_event *events,  int maxevents, int timeout);

epfd: epoll 专用的文件描述符,epoll_create()的返回值

events: 分配好的 epoll_event 结构体数组,epoll_wait 将会把发生的事件赋值到events 数组中

maxevents: events 数组的元素个数

timeout: 超时时间,单位为毫秒,为 -1 时,函数为阻塞

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

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

相关文章

(6.2-6.8)【大数据新闻速递】

关 注gzh“大数据食铁兽”,了解更多的大数据快讯 【华为曹冲:聚焦四大战略方向,共建数智金融未来】 6月7日,华为全球智慧金融峰会2023在上海举行。会上,华为数字金融军团CEO曹冲发表《智领睿变,共建数智…

Redis学习总结(一)

Redis 持久化机制 RDB 持久化 Redis RDB(Redis DataBase)是Redis的一种持久化方式。它可以将Redis中的数据快照存储在硬盘上,并在需要时重构该数据快照。因为可以在磁盘上存储和重构数据快照,所以RDB是一种非常高效的Redis数据备…

用于语义分割的动态焦点感知位置查询

文章目录 Dynamic Focus-aware Positional Queries for Semantic Segmentation摘要本文方法Dynamic Focus-aware Positional QueriesEfficient High-resolution Cross-attentionFocus-aware Segmentation Framework 实验结果 Dynamic Focus-aware Positional Queries for Seman…

Servlet运行原理及常见API

文章目录 一. Servlet运行原理二. Servlet常用API1. HttpServlet1.1. Servlet的生命周期1.2. Post请求的构造 2. HttpServletRequest2.1. 获取请求信息2.2. 前端给后端传输数据的三种方式2.2.1. 发送Get请求通过query string传输数据2.2.2. 发送Post请求通过form提交数据2.2.3.…

Python爬虫基础知识点

Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢&am…

LLCC68+HC32L110

一、准备 最近研究一下LORA,因为LLCC68是阉割版本的SX126X,所以就选用这颗芯片了 模块:随便选一家都可以我简单做了个测试板,接口如下:只需要注意DIO配置成中断引脚即可 二、程序流程 RX TX初始化 #define RF_FREQ…

springboot openfeign Sentinel统一降级处理

背景 openfeign降级常规操作如下: 此种方式太过于麻烦,每一个方法都要写一个降级逻辑,并且降级逻辑大多是雷同的。 目标 提供默认的降级方式,若openfeign未指定FallbackFactory则走默认降级方式,否则就走自定义的FallbackFact…

C++【unordered_map/set的底层实现-哈希表】—含有源代码

文章目录 前言一、unordered_map/unordered_set容器(1)unordered_map容器介绍及使用(2)unordered_set容器介绍及使用(3)它们和map/set对比 二、容器底层结构(1)哈希表概念&#xff0…

分布式算法之一致性 Hash 算法

tip:作为程序员一定学习编程之道,一定要对代码的编写有追求,不能实现就完事了。我们应该让自己写的代码更加优雅,即使这会费时费力。 💕💕 推荐:体系化学习Java(Java面试专题&#…

第35步 机器学习实战DLC:不平衡数据处理(下)

失踪人口回归的第二期,继续说一说用PSM处理不平衡数据。 一、啥叫PSM PSM全称为Propensity Score Matching,翻译过来就是倾向匹配得分,为了省流,让小Chart介绍一下: 放到我们的数据就是:根据某个特征&…

架构师需要看透公司的用户心智定位

一个架构师要站在用户的角度去思考架构的规划和设计。把注意力放在用户身上,已经有无数案例证明是可以带来重大商业和技术突破的。 很多创业公司,从初创到倒闭,都没搞清楚自己的目标人群和心智。如果一个公司,能锁定目标人群及其…

7个最佳WooCommerce跨境电商社交媒体插件

在互联的早期,您通常可以将产品直接放到网上并出售。但在今天你必须进行营销和做广告。如果没有包括社交媒体在内的可持续营销策略,您的商店可能会被忽视。值得高兴的是,有很多 WooCommerce跨境电商社交媒体插件可以用来传播信息,…

【CMake 入门与进阶(5)】 CMakeLists.txt 语法规则基础及部分常用指令-续(附使用代码)

project project命令用于设置工程名称: # 设置工程名称为 HELLO project(HELLO)执行这个之后会引入两个变量:HELLO_SOURCE_DIR 和 HELLO_BINARY_DIR,注意这两个变量名的前缀就是工程名称,HELLO_SOURCE_DIR 变量指的是 HELLO 工程…

华为推出首款全栈自主数据库 GaussDB,你怎么看?

鸿蒙套壳,鸿蒙套壳完了ERP套,ERP套壳,ERP套壳完了数据库套壳,数据库套壳完了…… 犹记得GaussDB之前一直宣传是基于PostgreSQL研发而来,不知道今天为啥摇身一变为首款全栈自主分布式数据库了。 基于开源研发改不恶心。…

智能设备管理系统

传统设备实施管理难点: 1、日常工作繁琐,手动纸质记录和 Excel 管理设备数据麻烦,后期难以汇总管理,且数据易丢失。 2、需核对设备巡检、保养、故障维修记录,手动更新设备状态和最近维修时间等。 3、无法实时获取设备最…

大学生网络工程想走网络安全方向该怎么规划?

明确需求,确定方向 网络安全 网络安全 是一个很广的概念,涉及的岗位也是非常多的,有安全服务、安全运维、渗透测试、web安全、安全开发、安全售前等等。可以看看下面每个岗位的要求与自身兴趣能力匹配度再决定最适合自己的方向。 渗透测试/Web安全工程师…

开启人机协作新时代:协作机器人的应用与展望

原创 | 文 BFT机器人 01 蓄势待发,产业变革新引擎 近年来,在政策扶持、资本助推和技术创新的共同作用下,产业迎来发展黄金期。日前,各行各业正经历产业智能化转型,机器人市场规模不断扩大,发展前景广阔&…

万宾建筑结构健康监测系统方案

建筑结构健康监测是现代建筑工程领域的重要措施之一。通过实时监测和评估建筑物的结构状态,可以及早发现潜在的问题,保障建筑物的安全性和稳定性。 随着城市化进程的加速和建筑规模的扩大,建筑结构的安全性和稳定性越来越受到关注。然而&…

chatgpt赋能python:Python快速打开:如何提高Python执行速度

Python 快速打开:如何提高 Python 执行速度 介绍 Python 是一种解释型语言,由于其简洁易读,广泛用于数据科学、机器学习、Web 开发等领域。然而,它的执行速度相对较慢,这通常是由于其解释器中面临的硬件资源限制以及…

如何查看docker下的mysql版本

进入运行的mysql的容器 docker exec -it mysqlserver bash 标红的位置可以是我们运行的别名,也可以为id 我们想连接mysql服务时报错了 我们看下配置文件 cat /etc/my.cnf 可以看到配置文件的sock文件位置并不在/var/lib/mysql文件夹中 这里又两种办法 1.直接修改…