IO多路复用之poll

news2024/11/16 15:46:37

文章目录

  • 一:poll函数接口
    • 参数说明:
    • 返回结果:
  • 二:poll的优缺点
    • 优点:
    • 缺点:
  • 三:poll代码示例

一:poll函数接口

#include <poll.h>
int poll(struct pollfd *fds, nfds_t nfds, int timeout);

在这里插入图片描述
我们从struct polled结构体可以看出,该结构体包含三个成员,文件描述符,对该文件描述符关心的事件,返回的该文件描述符对应的准备好的事件。

参数说明:

  • fds是一个poll函数监听的结构列表. 每一个元素中, 包含了三部分内容: 文件描述符, 监听的事件集合, 返回的事件集合。
  • nfds表示fds数组的长度。
  • timeout表示poll函数的超时时间, 单位是毫秒(ms)。

💡events和revents的取值:
在这里插入图片描述

返回结果:

  • 返回值小于0, 表示出错。
  • 返回值等于0, 表示poll函数等待超时。
  • 返回值大于0, 表示poll由于监听的文件描述符就绪而返回。

二:poll的优缺点

不同与select使用三个位图来表示三个fd_set的方式,poll使用一个pollfd的指针实现,对应的一个结构体数组。

优点:

  • pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。因为正如struct pollfd结构体所示,poll的特定的sock所关心的事件输入输出进行了分离,不需要再像select一样维护额外的结构记录需要关心的sock,因此接口使用比select更方便。
  • poll并没有最大数量限制 (但是数量过大后性能也是会下降),程序员决定数组大小!

缺点:

poll中监听的文件描述符数目增多时:

  • 和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符,意味着O(N)的遍历复杂度。
  • 每次调用poll都需要把大量的pollfd结构从用户态拷贝到内核中。
  • 同时连接的大量客户端在一时刻可能只有很少的处于就绪状态, 因此随着监视的描述符数量的增长, 其效率也会线性下降。

三:poll代码示例

使用poll监控标准输入:

#include <poll.h>
#include <unistd.h>
#include <stdio.h>
int main() {
	struct pollfd poll_fd;
	poll_fd.fd = 0;
	poll_fd.events = POLLIN;

	for (;;) {
		int ret = poll(&poll_fd, 1, 1000);
		if (ret < 0) {
			perror("poll");
			continue;
		}
		if (ret == 0) {
			printf("poll timeout\n");
			continue;
		}
		if (poll_fd.revents == POLLIN) {
			char buf[1024] = { 0 };
			read(0, buf, sizeof(buf) - 1);
			printf("stdin:%s", buf);
		}
	}
}

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

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

相关文章

Java设计模式之行为型-模板方法模式(UML类图+案例分析)

目录 一、概念 二、角色设计 三、代码实现 案例一 案例二 四、总结 一、概念 定义一个操作中的算法骨架&#xff0c;而将算法的一些步骤延迟到子类当中&#xff0c;使得子类可以不改变该算法结构的情况下重定义该算法的特定步骤&#xff0c;即在一个抽象类中公开定义了执…

信驰达科技携手TI将CC2340推向更广市场领域

根据蓝牙技术联盟&#xff08;Bluetooth SIG&#xff09;2023年最新发布《2023年蓝牙市场最新资讯》&#xff0c;市调机构ABI Research预测数据显示&#xff0c;蓝牙市场在未来五年将会实现高增长&#xff0c;蓝牙设备年出货量将保持强劲增长势头&#xff0c;预计到2027年将达7…

python高频函数—CSV() 读写

Part.1 csv.reader()函数 csv.reader(csvfile, dialectexcel, **fmtparams) 返回一个 reader 对象&#xff0c;该对象将逐行遍历 csvfile。 一个简短的用法示例: >>> import csv>>> with open(eggs.csv, newline) as csvfile:... spamreader csv.r…

ctrl键的作用

crtl是control的英文缩写&#xff0c;是控制的意思&#xff0c;长和其他键组合起来使用&#xff0c;达到快捷操作的功能。 例如&#xff1a;ctrlX是剪切的功能&#xff0c;ctrlP是打印设置&#xff0c;ctrlZ是撤销&#xff0c;ctrlF是查找&#xff0c;ctrlY是恢复的功能等。 …

在野外使用无线电台的必知事项

电台属于无线通信设备的一种&#xff0c;主要用于发送和接收无线电信号&#xff0c;实现语音、数据和图像等信息的传输。它一般是由发射机和接收机两部分组成&#xff0c;能够在不同的频段和频率上进行通信。通过无线电波传输信息&#xff0c;为人们在不同场景中提供可靠的远距…

11.Rocket解决分布式事务

highlight: arduino-light 两阶段提交协议 原文链接&#xff1a;https://blog.csdn.net/fenglibing/article/details/92417739 两阶段提交协议(Two-phase Commit&#xff0c;2PC)经常被用来实现分布式事务。一般分为协调器TC和若干事务执行者两种角色&#xff0c;这里的事务执行…

【Vue3】学习笔记-ref函数、reactive函数

ref函数、reactive函数 Ref函数reactive函数 Ref函数 作用&#xff1a;定义一个响应式的数据语法&#xff1a;const xxxref(initValue) 创建一个包含响应式数据的引用对象(reference对象&#xff0c;简称ref对象)。JS中操作数据:xxx.value模板中读取数据&#xff1a;不需要.va…

地理数据处理-地理空间表的导入与查询

前言 现在大部分数据库都支持地理空间的数据存储&#xff0c;可以方便的与GIS平台调用&#xff0c;比如Geoserver、ArcGis, 但是如果使用不规范的空间表去发布图层预览可能会出现各种问题&#xff0c;比如坐标系错误&#xff0c;无法聚焦。 本文将举例最常见的SQLServer和Post…

Godot引擎 4.0 文档 - 手册 - 2D

本文为Google Translate英译中结果&#xff0c;DrGraph在此基础上加了一些校正。英文原版页面&#xff1a; 2D — Godot Engine (stable) documentation in English 画布层 视口和画布项目 CanvasItem是所有 2D 节点的基础&#xff0c;无论是常规的 2D 节点&#xff0c;例如…

深入理解微分、积分电路!搞懂PID控制原理就这么简单!

很多朋友觉得PID是遥不可及&#xff0c;很神秘&#xff0c;很高大上的一种控制&#xff0c;对其控制原理也很模糊&#xff0c;只知晓概念性的层面&#xff0c;知其然不知其所以然&#xff0c;那么本期从另类视角来探究微分、积分电路的本质&#xff0c;意在帮助理解PID的控制原…

智慧排水监测系统有什么作用?

随着城市化进程的加速&#xff0c;城市排水系统的压力不断增加。然而&#xff0c;当前城市排水系统面临着管理效率低下、水资源浪费和洪涝灾害等问题。为了解决这些问题&#xff0c;智慧排水监测系统逐渐成为了新的解决方案。本文将为大家详细介绍智慧排水监测系统的作用以及智…

微软公布量子超级计算机路线图

光子盒研究院 6月22日&#xff0c;微软公布了三个重要的量子计算公告。首先&#xff0c;公司宣布它已经实现了通往量子超级计算机的六步路线图的第一个里程碑&#xff0c;并发表了一篇经同行评议的研究论文来证明这一成就。 这家科技巨头的第二项公告是将其人工智能&#xff08…

堆——“数据结构与算法”

各位CSDN的uu们你们好呀&#xff0c;今天小雅兰的内容仍旧是二叉树&#xff0c;此刻分享的内容是一种特殊的二叉树&#xff0c;也就是堆了。下面&#xff0c;让我们进入堆的世界吧&#xff01;&#xff01;&#xff01; typedef int HeapDataType; typedef struct Heap {HeapDa…

MES系统是什么?它如何帮助企业提高生产效率?

随着制造业的发展&#xff0c;越来越多的企业开始使用全面的制造执行系统&#xff08;MES&#xff09;来管理其生产过程。那么&#xff0c;MES系统到底是什么呢&#xff1f;它又是如何帮助企业提高生产效率的呢&#xff1f;本文将为大家详细介绍。 一、MES系统的概念 MES系统是…

Leetcode 剑指 Offer II 032. 有效的变位词

题目难度: 简单 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个字符串 s 和 t &#xff0c;编写一个函数来判断它们是不…

基于物联网技术的智能配电室综合监控系统设计与产品选型

摘要&#xff1a;配电室是电力系统的重要基础设施&#xff0c;可以保障供配电系统的安全稳定运行。但是&#xff0c;配电室数量多、部署分散、管理复杂&#xff0c;人工现场巡检管理方式费时费工、错误率高&#xff0c;如果发生故障隐患&#xff0c;往往无法及时发现。针对配电…

Sparse Fuse Dense: 向高质量的深度补全3D检测迈进

点云的稀疏性&#xff1a;在远距离和遮挡区域提供的信息较差&#xff0c;导致难以生成精确的3D边界框。 出现了多模态融合。 图像和点云的不同表示方式使得它们难以融合&#xff0c;导致性能不佳。 论文提出了一种新颖的多模态框架SFD&#xff08;Sparse Fuse Dense&#xf…

二层交换机工作原理与MAC地址介绍

目录 MAC地址介绍 MAC地址的组成 MAC地址分类 MAC地址的作用 二层交换机介绍 MAC地址表的定义 MAC地址表项类型 二层交换机对数据帧的处理动作 MAC地址介绍 MAC地址&#xff08;Media Access Control Address)&#xff0c;直译为媒体存取控制位地址 MAC地址的组成 MA…

华为OD机试真题(Java),图片整理(100%通过+复盘思路)

一、题目描述 Lily上课时使用字母数字图片教小朋友们学习英语单词&#xff0c;每次都需要把这些图片按照大小&#xff08;ASCII码值从小到大&#xff09;排列收好。请大家给Lily帮忙&#xff0c;通过代码解决。 Lily使用的图片使用字符"A"到"Z"、“a"…

JMeter 环境配置

目录 前言&#xff1a; 一、 JDK安装 二、 安装JMeter 三、 安装插件 前言&#xff1a; JMeter是一款功能强大的性能测试工具&#xff0c;用于模拟多种负载条件下的应用程序行为&#xff0c;环境配置是jmeter学习的第一步&#xff0c;每次换电脑就得重新配置&#xff0c;为…