阻塞型IO与非阻塞型IO

news2024/11/15 16:18:12

阻塞IO与非阻塞IO

一.IO模型

IO的本质是基于操作系统接口来控制底层的硬件之间数据传输,并且在操作系统中实现了多种不同的IO方式(模型),比较常见的有下列三种

  • 阻塞型IO模型
  • 非阻塞型IO模型
  • 多路复用IO模型(重点!重点!重点!)

二。阻塞型IO

当进程发出IO请求后,阻塞进程(让进程进入睡眠状态),资源就绪后唤醒进程继续执行。
注意:一般默认的 IO 操作都是阻塞型 IO
在这里插入图片描述
示例代码:从标准输入读取数据,并进行输出

#include <stdio.h>
int main()
{
	int num;
	cin >> num;
	cout << num << endl;
	return 0;
}

特点:会一直等待,直到数据就绪

三 非阻塞型IO

当进程发出IO请求后,无论资源是否就绪都会立即返回,相应的模型如下:
在这里插入图片描述
实现非阻塞型IO,需要设置 O_NONBLOCK 标志,设置有两种方式

  • 可以通过调用 fcntl 函数来进行设置
    在这里插入图片描述

  • 通过open函数来进行设置,一般在打开文件时就需要设置

fcntl 函数

函数头文件
#include <unistd.h>
#include <fcntl.h>
函数原型
int fcntl(int fd, int cmd,/* arg */ );


函数功能
通过命令字(cmd)来设置文件描述符


函数参数
fd:文件描述符
cmd:控制命令字
	F_GETFD:获取文件描述符标志
	F_SETFD:设置文件描述符标志
	F_GETFL:获取文件状态标志
	F_SETFL:设置文件状态标志

示例代码:将标准输入设置为非阻塞

示例代码:将标准输入设置为非阻塞

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
int main()
{
	// 获取文件状态标志
	int flags = fcntl(0,F_GETFL);
	// 追加非阻塞标志
	flags |= O_NONBLOCK;
	// 设置文件状态标志
	int ret = fcntl(0,F_SETFL,flags);
	if(ret)
	{
		perror("fcntl[F_SETFL] error.");
		exit(EXIT_FAILURE);
	}
	int number=10;
	scanf("%d",&number);
	printf("number=%d\n",number);
	for(int i=1;i<10;i++)
	{
		printf("%3d",i);
	}
	putchar('\n');
	return 0;
}

在这里插入图片描述
从运行结果可以看出:程序不会等待用户输入,会立即返回

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

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

相关文章

KVM 安装 Windows11

在 KVM 安装 Windows 比安装 Ubuntu 会复杂一些&#xff0c;去微软官网下载 Win11&#xff0c;同时要下载 Virtio 可以从 Fedora 下载 &#xff08;https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/&#xff09;。 安装Window 命令行输入以下命令&#xf…

uniapp数据缓存

利用uniapp做开发时&#xff0c;缓存数据是及其重要的&#xff0c;下面是同步缓存和异步缓存的使用 同步缓存 在执行同步缓存时会阻塞其他代码的执行 ① uni.setStorageSync(key, data) 设置缓存&#xff0c;如&#xff1a; uni.setStorageSync(name, 张三) ② uni.getSt…

Python 课程21-Django

前言 在当今互联网时代&#xff0c;Web开发已成为一项必备技能。而Python作为一门简洁、高效的编程语言&#xff0c;其Web框架Django以其强大的功能和快速开发的特点&#xff0c;受到了广大开发者的青睐。如果你想深入学习Django&#xff0c;构建自己的Web应用&#xff0c;那么…

呼吸自救防护器的使用方式

呼吸自救防护器是一种用于在紧急情况下提供呼吸保护的设备&#xff0c;通常用于矿井、化工厂、火灾等环境。当出现缺氧、有毒有害气体泄漏或烟雾等紧急情况时&#xff0c;呼吸自救防护器可以提供氧气或过滤空气&#xff0c;帮助使用者在短时间内安全呼吸&#xff0c;逃离危险区…

十大常用加密软件排行榜|2024年好用的加密软件推荐,企业必备!

在信息安全日益受到重视的当今&#xff0c;选择合适的加密软件对于企业保护敏感数据至关重要。以下是2024年十大常用加密软件排行榜&#xff0c;助您提升数据安全性。 Ping32 Ping32是一款功能强大的加密软件&#xff0c;支持多种文件格式加密&#xff0c;用户界面友好&#xf…

【机器学习】 Flux.jl 求解 XOR 分类问题的神经网络模型

Flux.jl 搭建神经网络基本流程 #mermaid-svg-JuKPmnLqTqDhEhKf {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-icon{fill:#552222;}#mermaid-svg-JuKPmnLqTqDhEhKf .error-text{fill:#5522…

【前端】35道JavaScript进阶问题

来源&#xff1a; javascript-questions/zh-CN/README-zh_CN.md at master lydiahallie/javascript-questions GitHub 记录一些有趣的题。 1 输出是&#xff1f; const shape {radius: 10,diameter() {return this.radius * 2},perimeter: () > 2 * Math.PI * this.rad…

[单master节点k8s部署]26.Istio流量管理(二)

bookinfo微服务 这个bookinfo微服务由四个微服务构成&#xff1a; 1&#xff09;productpage 这个微服务会调用 details 和 reviews 两个微服务&#xff0c;用来生成页面&#xff1b; 2&#xff09;details 这个微服务中包含了书籍的信息&#xff1b; 3&#xff09;reviews …

Scikit-LearnTensorFlow机器学习实用指南(三):一个完整的机器学习项目【下】

机器学习实用指南(三)&#xff1a;一个完整的机器学习项目【下】 作者&#xff1a;LeonG 本文参考自&#xff1a;《Hands-On Machine Learning with Scikit-Learn & TensorFlow 机器学习实用指南》&#xff0c;感谢中文AI社区ApacheCN提供翻译。 本文全部代码和数据集保存在…

TypeError: load() missing 1 required positional argument: ‘Loader‘

标题TypeError: load() missing 1 required positional argument: ‘Loader’ 源码&#xff1a; 处理后&#xff1a; 顺利通过&#xff0c;由于yaml版本导致的问题

Alertmanager 路由匹配

Alertmanager主要负责对Prometheus产生的告警进行统一处理&#xff0c;因此在Alertmanager配置中一般会包含以下几个主要部分&#xff1a; 全局配置&#xff08;global&#xff09;&#xff1a;用于定义一些全局的公共参数&#xff0c;如全局的SMTP配置&#xff0c;Slack配置等…

day-61 外观数列

思路 每次对字符串进行遍历即可&#xff0c;用一个Integer统计相邻的相同字符个数&#xff0c;如果当前字符与后面邻接的字符相同&#xff0c;num;如果不同&#xff0c;则将""nums.charAt(j)拼接到字符串中 解题过程 当n1时&#xff0c;可以直接返回&#xff0c;不为…

【机器学习导引】ch3-线性模型

线性回归 梯度 在数学中&#xff0c;对于函数 f ( x 1 , … , x m ) f(x_1, \ldots, x_m) f(x1​,…,xm​) 在点 a ( a 1 , … , a m ) a (a_1, \ldots, a_m) a(a1​,…,am​) 处的梯度被定义为&#xff1a; ∇ f ( a ) ( ∂ f ∂ x 1 ( a ) , … , ∂ f ∂ x m ( a ) )…

排序题目:对角线遍历 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 解法思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;对角线遍历 II 出处&#xff1a;1424. 对角线遍历 II 难度 6 级 题目描述 要求 给定一个二维整数数组 nums \texttt{nums} nums&#xff0c;将 …

vue3.0 + element plus 全局自定义指令:select滚动分页

需求&#xff1a;项目里面下拉框数据较多 &#xff0c;一次性请求数据&#xff0c;体验差&#xff0c;效果就是滚动进行分页。 看到这个需求的时候&#xff0c;我第一反应就是封装成自定义指令&#xff0c;这样回头用的时候&#xff0c;直接调用就可以了。 第一步 第二步&…

eHR软件的价格一般是多少?

在人力资源数字化转型的大潮中&#xff0c;越来越多的企业开始关注eHR&#xff08;电子人力资源管理&#xff09;软件的采购问题。eHR软件价格并不是一个简单的数字&#xff0c;而是受多种因素影响&#xff0c;具有较大波动性。那么&#xff0c;eHR软件的价格一般是多少呢&…

侧边菜单的展开和折叠

通过按钮控制侧边栏的展开和折叠通过窗口宽度的变化控制侧边栏的展开和折叠&#xff08;小于768px,自动折叠&#xff09; 通过按钮控制展开 通过按钮控制折叠 切换到手机模式自动折叠 环境准备&#xff1a;Vue3Element-UI Plus <script setup> import {onMounted, r…

基于SpringBoot + Vue的Gucci进销存系统

文章目录 前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S 四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论 五、项目代码参考六、数据库代码参考七、项目论文示例结语 前言 &#x1f49b;博主介绍&a…

001. OBS (obs-studio)

1. 下载 https://obsproject.com/download windows c 插件下载 https://obsproject.com/visual-studio-2022-runtimes 2. 操作步骤 https://renwen.shnu.edu.cn/_s40/9a/2c/c28309a760364/page.psp https://zhuanlan.zhihu.com/p/597231652

【Java 问题】基础——IO

接上文 IO 42.Java 中 IO 流分为几种?Java IO体系中的装饰器模式抽象组件&#xff08;Component&#xff09;具体组件&#xff08;Concrete Component&#xff09;抽象装饰器&#xff08;Decorator&#xff09;具体装饰器&#xff08;Concrete Decorator&#xff09;使用装饰器…