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

IO学习系列之阻塞IO

  • 阻塞IO:
  • 若资源没有准备就绪,会阻塞等待资源
  • 若资源准备就绪,会获取相关资源
  • 特点:
  • 在所有的IO模型中,阻塞IO是最简单最常用效率最低的;
  • 写阻塞:
  • 无名管道有名管道等进程间的通信;
  • 读阻塞:
  • 管道为例,具体读阻塞操作为:
  • 当进程执行到读操作的时候,若缓冲区有内容,则读取内容继续向下执行,若缓冲区没有内容,进程进入休眠态,直到缓冲区中有内容,由内核唤醒该进程,来读取缓冲区内容,然后继续向下执行;
  • 三个写端:
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <stdbool.h>int main(int argc, char const *argv[]){int fd = open("myfifo1",O_WRONLY);char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';write(fd,buf,sizeof(buf));}return 0;}
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <stdbool.h>int main(int argc, char const *argv[]){int fd = open("myfifo2",O_WRONLY);char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';write(fd,buf,sizeof(buf));}return 0;}
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <stdbool.h>int main(int argc, char const *argv[]){int fd = open("myfifo3",O_WRONLY);char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1] = '\0';write(fd,buf,sizeof(buf));}return 0;}
  • 一个读端:
	#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd.h>#include <fcntl.h>#include <stdbool.h>int main(int argc, char const *argv[]){int fd1 = open("myfifo1",O_RDONLY);int fd2 = open("myfifo2",O_RDONLY);int fd3 = open("myfifo3",O_RDONLY);char buf[128] = {0};while(true){memset(buf,0,sizeof(buf));read(fd1,buf,sizeof(buf));printf("myfifo1:%s\n",buf);memset(buf,0,sizeof(buf));read(fd2,buf,sizeof(buf));printf("myfifo2:%s\n",buf);memset(buf,0,sizeof(buf));read(fd3,buf,sizeof(buf));printf("myfifo3:%s\n",buf);       }close(fd1);close(fd2);close(fd3);return 0;}
  • 运行结果:
	myfifo1:hellomyfifo2:worldmyfifo3:himyfifo1:chinamyfifo2:beijingmyfifo3:the create wallmyfifo1:i love umyfifo2:miss umyfifo3:miss u
  • 仅供参考

相关文章:

  • Linux安装配置awscli命令行接口工具及其从aws上传下载数据
  • GPT技术的崛起:改变生活与挑战未来
  • ch0_OSI 七层网络协议介绍
  • 亚马逊云科技大语言模型下的六大创新应用功能
  • acwing算法基础之数据结构--堆算法
  • GPT与人类共生:解析AI助手的兴起
  • 乌干达市场开发攻略,收藏一篇就够了
  • Win11安装网络打印机
  • 2023-11-05 LeetCode每日一题(重复的DNA序列)
  • 【Python语言】集合的使用方法总结
  • 【Unity细节】生命函数Start的逻辑比从外部调用方法比起来哪个快
  • 亚马逊云科技发布完整端到端 AI 技术堆栈,力促生成式 AI 更加普惠
  • 【C语言】函数的系统化精讲(一)
  • CSS3设计动画样式
  • JavaScript_Date对象_实例方法_set类
  • 【译】JS基础算法脚本:字符串结尾
  • 08.Android之View事件问题
  • iOS编译提示和导航提示
  • Js基础——数据类型之Null和Undefined
  • LintCode 31. partitionArray 数组划分
  • Median of Two Sorted Arrays
  • spring-boot List转Page
  • vagrant 添加本地 box 安装 laravel homestead
  • 翻译--Thinking in React
  • 给第三方使用接口的 URL 签名实现
  • 前端存储 - localStorage
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深入浅出webpack学习(1)--核心概念
  • 思维导图—你不知道的JavaScript中卷
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 学习ES6 变量的解构赋值
  • 走向全栈之MongoDB的使用
  • (11)MSP430F5529 定时器B
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (2)nginx 安装、启停
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (libusb) usb口自动刷新
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)ssm高校实验室 毕业设计 800008
  • (九)One-Wire总线-DS18B20
  • (三)Honghu Cloud云架构一定时调度平台
  • (轉)JSON.stringify 语法实例讲解
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .net core使用ef 6
  • .net 受管制代码
  • .net 怎么循环得到数组里的值_关于js数组
  • /var/lib/dpkg/lock 锁定问题
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [BZOJ2208][Jsoi2010]连通数
  • [C++]C++类基本语法
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [HarekazeCTF2019]encode_and_encode 不会编程的崽