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

select函数(Unix系统)

select函数(Unix系统)

  • 一、函数格式
  • 二、参数及返回值
    • 2.1 struct fd_set 结构体
    • 2.1 struct timeval 结构体
    • 2.3 函数参数
    • 2.4 返回值
  • 三、用法举例
    • 3.1 监控终端输入内容

一、函数格式

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

二、参数及返回值

2.1 struct fd_set 结构体

struct fd_set 可以理解为一个存放文件句柄的集合(socket句柄也是文件描述符),fd_set集合可通过一些宏人为控制,如:

  • FD_ZERO(fd_set *);清空集合
  • FD_SET(int, fd_set *);将指定文件描述符加入集合
  • FD_CLR(int, fd_set*); 将一个给定的文件描述符从集合中删除
  • FD_ISSET(int ,fd_set* );检查集合中指定的文件描述符是否可以读写

2.1 struct timeval 结构体

比较常用,用来代表时间值,有两个成员,一个是秒数,另一个是微秒

struct timeval {time_t tv_sec; 	// seconds long tv_usec; 	// microseconds 
};

2.3 函数参数

int nfds:该整数值用来指示集合中所有文件描述符的范围,设置为所有文件描述符中的最大值加1。不能设置错喽。
fd_set *readfds:指向fd_set类型结构体的指针,监控这些文件描述符的变化,看是否可以从这些文件中读数据了。(如果有一个文件可读,select就返回一个大于0的值;若没有可读的文件,则根据 time out 参数判断是否超时,若超时返回0;若发生错误,返回负值,可以传入NULL,表示不关心任何文件的读变化。)
fd_set *writefds:指向fd_set类型结构体的指针,监控这些文件描述符的变化,看是否可以从这些文件中写数据了。(如果有一个文件可写,select就返回一个大于0的值;若没有可写的文件,则根据 time out 参数判断是否超时,若超时返回0;若发生错误,返回负值,可以传入NULL,表示不关心任何文件的读变化。)
fd_set *exceptfds:同上,监视文件错误异常。
struct timeval *timeout:超时时间,可以使select处于三种状态:
a、传入NULL,则处于阻塞状态,即select只有当监控到文件读写状态发生变化才返回。
b、若时间设置为0分0秒,则就变成一个纯粹的非阻塞函数,不管文件描述符是否变化,都立刻返回。文件状态无变化返回0,有变化返回一个正值。
c、timeout的值大于零,即在设定的时间内被阻塞。超时后返回。

2.4 返回值

  • 负值:发生错误
  • 正值:某些文件可读或者可写或出错
  • 0:等待超时,没有可读可写或错误的文件

三、用法举例

3.1 监控终端输入内容

#include <sys/time.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <assert.h>
#include <unistd.h>int main ()
{int keyboard;int ret,i;char c;fd_set readfd;struct timeval timeout;keyboard = open("/dev/tty",O_RDONLY | O_NONBLOCK);assert(keyboard>0);while(1) {timeout.tv_sec=1;timeout.tv_usec=0;FD_ZERO(&readfd);FD_SET(keyboard,&readfd);ret=select(keyboard+1,&readfd,NULL,NULL,&timeout);if(FD_ISSET(keyboard,&readfd)) {i=read(keyboard,&c,1);if('\n'==c)continue;if ('q'==c)break;printf("the input is %c \n",c);}}
}

相关文章:

select函数(Unix系统)

select函数&#xff08;Unix系统&#xff09; 一、函数格式二、参数及返回值2.1 struct fd_set 结构体2.1 struct timeval 结构体2.3 函数参数2.4 返回值 三、用法举例3.1 监控终端输入内容 一、函数格式 #include <sys/time.h>#include <sys/types.h>#include <…...

设计模式16——策略模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 策略模式&#xff08;Strategy…...

Putty: 随心御剑——远程启动服务工具plink

一、引言:如何远程控制 也许你会有这样的场景,交互程序(以下简称UI程序)跑在windows端,而控制程序跑在Linux上。我们想要通过windows端 UI程序来启动Linux下面的服务,来一场酣畅淋漓的御剑飞行咋办,难道要自己十年磨一剑,在Linux下编写一个受控服务程序么.计算机科技发…...

Vectorworks 2024 Mac安装包下载Vectorworks 2024安装教程3D建模设计工具

安装 步骤 1&#xff0c;双击下载好的安装包&#xff0c;打开。 2&#xff0c;将G1DXHL.ldf拖到桌面上备用。 3&#xff0c;返回打开的镜像 选择install vectorworks2024 双击打开启动安装程序。电脑就90hi高腰腿疼痛和Y&Aaa9yY 4&#xff0c;输入电脑密码。 5&#xff0…...

CSRF 攻击详解

什么是csrf攻击&#xff1f; CSRF攻击&#xff08;Cross-Site Request Forgery&#xff0c;跨站请求伪造&#xff09;是一种常见的网络攻击方式&#xff0c;它利用网站对用户浏览器的信任&#xff0c;诱使用户在不知情的情况下发送恶意请求。这类攻击通常发生在用户已经通过身…...

单链表OJ题(课堂总结)

1.链表的带环问题 上图就是一个典型的带环链表 1.1如何判读链表是否带环&#xff1f; 最常见的方法就是利用快慢指针&#xff0c;快指针追加慢指针&#xff0c;当二者相等的时候即可判断链表带环 其实现的代码如下&#xff1a; bool hasCycle(struct ListNode*head) { s…...

cad角度如何精确到0.1

可以通过更改角度精度的方式把角度的标注精确到小数点后几位&#xff0c;具体方法如下&#xff1a; 1、打开一个CAD文档&#xff0c;在文档中画一个角&#xff0c;如下图&#xff1a; 文章源自设计学徒自学网-https://www.sx1c.com/47920.html 2、给此角进行角度的标注&#…...

STM32H743+USBHID+CubeMX配置

一、环境准备 电脑系统&#xff1a;Windows 10 专业版 20H2 IDE&#xff1a;Keil v5.35、STM32CubeMX v6.5.0 测试硬件&#xff1a;正点原子阿波罗STM32H743 二、测试步骤 1、使用用例工程 配置STM32H743定时器功能-CSDN博客https://blog.csdn.net/horse_2007s/article/d…...

路由传参和获取参数的三种方式

路由传参和获取参数在前端开发中是一个常见的需求&#xff0c;特别是在使用如 Vue.js、React 等前端框架时。下面&#xff0c;我将以 Vue.js 为例&#xff0c;介绍三种常见的路由传参和获取参数的方式&#xff1a; 1. 使用 params 传参 传参&#xff1a; 在路由配置中&#…...

代码随想录算法训练营第四十一天|509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营第四十一天 509. 斐波那契数 题目链接&#xff1a;509. 斐波那契数 动规五部曲&#xff1a; 确定dp数组以及下标的含义&#xff1a;第i个数的斐波那契数值是dp[i]确定递推公式&#xff1a;dp[i] dp[i - 1] dp[i - 2];dp数组如何初始化&#xff1a;dp[…...

HTML5表单控件:新时代的交互魔法手册

&#x1f680;HTML5表单控件&#xff1a;新时代的交互魔法手册 &#x1f3af;HTML5表单控件速览&#xff1a;新面孔&#xff0c;新功能1. 日期时间选择器&#xff08;Date & Time Picker&#xff09;2. 数字输入框&#xff08;Number Input&#xff09;3. 搜索框&#xff0…...

WordPress安装插件失败No working transports found

1. 背景&#xff08;Situation&#xff09; WordPress 社区有非常多的主题和插件&#xff0c;大部分人用 WordPress 都是为了这些免费好用的主题和插件。但是今天安装完 WordPress 后安装插件时出现了错误提示&#xff1a;“ 安装失败&#xff1a;下载失败。 No working trans…...

多线程理论及操作

【一】什么是线程 在传统操作系统中&#xff0c;每个进程有一个地址空间&#xff0c;而且默认就有一个控制线程 线程顾名思义&#xff0c;就是一条流水线工作的过程 一条流水线必须属于一个车间&#xff0c;一个车间的工作过程是一个进程 车间负责把资源整合到一起&#xff…...

本周 MoonBit 核心库进行 API 整理工作、工具链持续完善

MoonBit更新 【核心库 Breaking】核心库进行API整理工作 所有immutable数据结构被放在immut路径下&#xff0c;如immutable_hashmap.Map变为immut/hashmap.Map // Before let a : immutable_hashmap.Map[Int, Int] immutable_hashmap.make() // After let a : immut/hashma…...

Golang net/http标准库常用方法(三)

大家好&#xff0c;针对Go语言 net/http 标准库&#xff0c;将梳理的相关知识点分享给大家~~ 围绕 net/http 标准库相关知识点还有许多章节&#xff0c;请大家多多关注。 文章中代码案例只有关键片段&#xff0c;完整代码请查看github仓库&#xff1a;https://github.com/hltfa…...

24校招总结

个人背景 本科&#xff1a;三本通信专业 硕士&#xff1a;B区双非计算机硕 今年2月签了东南沿海二线城市某公司C游戏服务端开发 我同学大部分都是去电网&#xff0c;大专老师&#xff0c;气象局事业编……就我这个是纯牛马了。 离收到Offer3个月了&#xff0c;前段时间参加…...

PHP APCu缓存使用与避坑

APCu 极简概括&#xff1a; PHP 的开源内存缓存扩展&#xff0c;类比Redis&#xff0c;但是一般都用Redis&#xff0c;所以APCu用的很少。官方文档&#xff1a;https://www.php.net/manual/zh/apcu.configuration.php解决问题&#xff1a;类比Redis做缓存组件&#xff0c;提升…...

mybatis xml

delete from t_enterprise_output_value where output_id IN #{outputId} 批量插入 功能&#xff1a;单个或批量插入数据&#xff0c;若数据已存在&#xff0c;则忽略 <insert id"saveBatchIgnoreInto" parameterType"java.util.List">insert igno…...

“不是我兄弟”!刘强东内部“狼性训话”流出!

今天&#xff0c;京东创始人刘强东5月24日的线上讲话流出。 在这次线上讲话中&#xff0c;刘强东首先宣布为全体采销员工涨薪20%—100%&#xff0c;随后进行了一番“狼性训话”。往期报道可戳&#xff1a;刘强东怒了&#xff1a;“不是我兄弟”&#xff01; 刘强东在讲话中指…...

函数调用时长的关键点:揭秘参数位置的秘密

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、默认参数的秘密 示例代码 二、关键字参数与位置参数的舞蹈 示例代码 总结 一、默认参…...

面试:如果让你设计一个客服 Agent,你会如何划分四大组件的职责?

这个问题挺经典的,我之前负责过客服系统的设计,就结合我们线上的实践来说说。 核心就是四件事:定义角色、管理记忆、制定计划、执行动作 。 先说 Profile(角色定义) 。客服 Agent 得知道自己是谁、以什么姿态服务。我们当时设计的时候会预设几个维度:一个是基础信息,比…...

并发数据结构设计与无锁编程实践

1. 并发数据结构的设计挑战与解决方案在现代多线程编程中&#xff0c;并发数据结构的设计一直是个棘手的问题。想象一下&#xff0c;你正在管理一个繁忙的机场控制塔&#xff0c;多架飞机同时请求降落许可&#xff0c;而你必须确保每架飞机都能安全降落&#xff0c;不会发生冲突…...

告别Python版本冲突!用Anaconda的conda命令5分钟搞定Python 3.8专属虚拟环境

告别Python版本冲突&#xff01;用Anaconda的conda命令5分钟搞定Python 3.8专属虚拟环境 当你的开发机同时运行着基于Python 3.8的旧项目和支持Python 3.10的新项目时&#xff0c;是否经常遇到以下场景&#xff1a;刚在A项目调试通过的代码&#xff0c;切换到B项目就报错&#…...

技术人的英语能力如何影响薪资?数据说话

打开任何一个招聘平台&#xff0c;搜索“软件测试工程师”&#xff0c;你会发现一个越来越普遍的现象。对于那些薪资范围宽、技术描述详尽、公司名号响亮的岗位&#xff0c;末尾往往会附上一句&#xff1a;“英语可作为工作语言”、“英文读写能力优异”、“CET-6以上优先”。这…...

通过curl命令快速测试Taotoken平台API连通性与模型列表

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过curl命令快速测试Taotoken平台API连通性与模型列表 基础教程类&#xff0c;本文面向需要快速验证环境或进行排错的开发者&…...

成都制造企业供应链价格波动频繁,AI智能体该先预警哪些信号?

一、价格波动不是采购一个部门能扛住的问题很多制造企业谈供应链价格波动&#xff0c;第一反应是让采购去谈价、催报价、找替代供应商。但在真实经营里&#xff0c;价格风险很少只停留在采购单价上。铜、铝、钢材、塑料、电子元器件、包装材料、运费、汇率和供应商产能变化&…...

量子优化算法ITEMC:原理、实现与应用

1. 量子优化算法ITEMC的核心原理量子优化算法ITEMC&#xff08;Imaginary Time Evolution Mimicking Circuit&#xff09;是一种创新的混合量子-经典算法&#xff0c;专门用于解决二次无约束二进制优化&#xff08;QUBO&#xff09;问题。其核心思想源自量子力学中的虚时间演化…...

AI 应用开发到底在开发什么?

很多人刚开始接触 AI 应用开发时&#xff0c;会把它理解成“调用一个大模型接口”。这个理解不能说错&#xff0c;但太浅了。真正能在公司里上线、能产生价值的 AI 应用&#xff0c;往往不是一个简单的聊天框&#xff0c;而是一套完整系统。它要接用户入口&#xff0c;要接业务…...

终极指南:如何用文字描述快速生成专业CAD图纸

终极指南&#xff1a;如何用文字描述快速生成专业CAD图纸 【免费下载链接】text-to-cad-ui A lightweight UI for interacting with the Zoo Text-to-CAD API. 项目地址: https://gitcode.com/gh_mirrors/te/text-to-cad-ui 还在为复杂的CAD软件界面感到困惑吗&#xff…...

3步搞定:m4s-converter让你的B站缓存视频重获新生

3步搞定&#xff1a;m4s-converter让你的B站缓存视频重获新生 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困境&#…...