linux文件IO:select

news/2025/1/22 14:41:04/文章来源:https://www.cnblogs.com/sgqmax/p/18685895

select

电平触发

#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>int select(int n, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, struct timeval* timeout);

在指定的文件描述符准备好I/O之前或超过一定时间限制,select调用会被阻塞

readfds文件描述符集合,监测可读数据
writefds文件描述符集合,监测可写数据
exceptionfds文件描述符集合,监测异常或带外out-of-band数据(适用于套接字)
成功返回时,每个集合只包含对应类型的I/O就绪的文件描述符

n为所有集合中文件描述符的最大值加一

timeout指向timeval结构体

#include<sys/time.h>
struct timeval{long tv_sec;  // secondslong tv_usec; // microseconds
}

若该参数不为NULL,即使没有文件描述符处于I/O就绪态,select也会在指定时间后返回
若时限中两个都为0,会立即返回,并报告调用时所有事件对应的文件描述符均不可用,且不等待任何后续操作

宏操作

通过宏来管理集合中的文件描述符,允许Unix系统按其希望的方式实现,大多数系统实现为位数组

FD_CLR(int fd, fd_set* set);
FD_ISSET(int fd, fd_set* set);
FD_SET(int fd, fd_set* set);
FD_ZERO(fd_set* set);

FD_ZERO从集合中移除所有文件描述符
FD_SET向集合中添加文件描述符
FD_CLR从集合中移除文件描述符,设计良好的代码从不使用该函数
FD_ISSET测试一个文件描述符是否在集合中,若不存在,返回0

由于文件描述符集合是静态建立的,所以文件描述符数量的上限和文件描述符的最大值均有限制
FD_SETSIZE设定,Linux上值为1024

返回值和错误码

成功时,返回所有集合中I/O就绪的文件描述符的数目,若指定了时限,返回值可能为0
错误时,返回-1,同时errno被设置为下列值

错误码 说明
EBADF 某一个集合中的一个文件描述符非法
EINTR 等待时捕获了一个信号,可以重新发起调用
EINVAL 参数n为负数,或给出的时限不合法
ENOMEM 没有足够的内存完成请求

示例

#include<stdio.h>
#include<sys/time.h>
#include<sys/types.h>
#include<unistd.h>#define TIMEOUT 5
#define BUF_LEN 1024int main(void){struct timeval tv;fd_set readfds;FD_ZERO(&readfds);FD_SET(STDIN_FILENO, &readfds);tv.tv_sec= TIMEOUT;tv.tv_usec= 0;int ret= select(STDIN_FILENO+1, &readfds, NULL, NULL);if(ret==-1){perror("select");return 1;}else if(!ret){printf("%d seconds elapsed.\n", TIMEOUT);return 0;}if(FD_ISSET(STDIN_FILENO, &readfds)){char buff[BUF_LEN+1];int len= read(STDIN_FILENO, buff, BUF_LEN);if(len==-1){perror("read");return 1;}if(len){buf[len]='\0';printf("read:%s\n", buf);}return 0;}fprintf(stderr, "this should not happen\n");return 0;
}

实现可移植的sleep
微秒级的睡眠机制

struct timeval tv;
tv.tv_sec = 0;
tv.tv_usec = 500;// sleep for 500 microseconds
select(0,NULL,NULL,NULL, &tv);

Linux提供了高精度的睡眠机制的实现

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

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

相关文章

人工智能创新型教师培育计划(第一期)

Skip to contentOpenHydraSearchKMain Navigation首页 课程新一代人工智能经典实验【中学】 XEdu系列【中学】 中小学AI开源课程倡议使用指南活动获取支持On this page人工智能创新型教师培育计划(第一期) 一、组织单位 二、活动背景 三、活动内容 四、活动安排 五、师资介绍…

前置数学

一些必要 trick推式子,先提 \(\sum\) 和 \(\Pi\) 到最前面,然后从后往前合并,必要时考虑更改 \(\sum\) 的取值 看到次方变为斯特林数,\(x^n=\sum\limits_{i=0}^{n} {n \brace i}{x \choose i}i!=\sum\limits_{i=0}^{n}\sum\limits_{i=1}^m{(-1)^{m-i}\frac{i^n}{(m-i)!}}{x…

MUX-VLAN

MUX VLAN(Multiplex VLAN)是一种高级的VLAN技术,它通过在交换机上实现二层流量隔离和灵活的网络资源控制,提供了一种更为细致的网络管理方式。 一、基本概念 MUX VLAN分为主VLAN(Principal VLAN)和多个子VLAN(Subordinate VLAN)。 主VLAN是MUX VLAN配置中的核心VLAN,它…

OpenWrt 挂载 SMB

通过OpenWrt挂载smb存储,并再通过smb分享(实现分布分享统一入口?)添加用户 依赖 opkg install shadow-common opkg install shadow-useradd添加 smb 专用用户 useradd YOUR_SMB_USER_NAME将用户与 smb 服务关联 smbpasswd -a YOUR_SMB_USER_NAMEOpenWrt 设置 挂载 SMB 网络共…

高效批量工作流导入及脚本上线,利用DolphinScheduler接口轻松实现

实现了批量生成DolphinScheduler的任务,当导入时发现只能逐个导入,因此通过接口实现会更方便。 DolphinScheduler接口文档 DolphinScheduler是有接口文档的,地址是 http://IP:12345/dolphinscheduler/swagger-ui/index.html?language=zh_CN&lang=cn不过这文档写的比较简…

IDEA如何打开每日提示?

前言 大家好,我是小徐啊。我们在使用IDEA开发Java应用的时候,经常需要使用IDEA的各种各样的技巧,提示。这个在每次IDEA打开的时候,会自动弹出来。但有时候,我们可能不小心把这个提示设置成关闭了,导致后面打开IDEA的时候,再也不弹出这个提示了。这样我们可能就不能很全面…

如何用vscode打开obj、glb文件,查看3D文件

方案1:安装插件 3D Viewer for VSCode,安装完可以查看obj 但是不懂为啥是白色的 glTF Tools,安装完可以查看gltf 启动位置在右上角:白色小山的图标 这个效果不错,看起来比较舒服。 但是gltf从哪里来呢? 首先我们有一个glb文件,右键它,点击倒数第二行的“glTF: import …

时间序列平稳性的双重假设检验:KPSS与ADF方法比较研究

在进行时间序列分析之前,确定序列的平稳性是一个关键步骤。平稳性指的是时间序列的统计特性(如均值和方差)在时间维度上保持不变。本文将详细介绍如何运用 KPSS 检验和 Dickey-Fuller 检验来验证序列的平稳性。这两种检验方法基于不同的统计假设:KPSS 检验的原假设是数据非…

Svelte 最新中文文档翻译(4)—— 符文(Runes)下

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输

固定测斜探头 土体位移变化数据支持 助力工程监测 无线传输FI系列固定测斜探头是一款专为土体内部位移变化监测而设计的高精度测量仪器。无论是深基坑开挖、地铁地基、公路地基、挡土墙、坝体、尾矿库还是山体滑坡等工程项目,我们的测斜探头都能提供准确可靠的数据支持。该测斜…

研发效率低下?试试这些改进方法

最近这段时间,互联网上发生了很多大事:极越汽车突然宣布破产解散;养乐多上海工厂关闭;网传海信大规模裁员;……2024年即将结束,如果给2024年打个标签,有人说是“愈加魔幻”的一年,有人说是“挑战激增”的一年,也有人说是“生存指数飙升”的一年。 根据裁员追踪机构lay…

复现一下最近的湘岚杯的pwn部分

前言 pwn萌新一枚,这次湘岚杯pwn题只出了两道,后面orw写了exp但是一直打不通,后来发现思路错了。宇宙射线这题很新颖,虽然比赛期间没有做出来,但是赛后复现时学到了很多东西,还是很开兴的。题解过程 ret2text签到 解题思路: ​ 这题是pwn题中的签到题,题目描述也很清晰…