IO进程---day5

 

 1、使用有名管道实现两个进程之间的相互通信

//管道文件
#include<myhead.h>
int main(int argc, const char *argv[])
{//创建有名管道文件1if(mkfifo("./pipe1",0664)==-1){perror("创建管道文件失败");return 0;}if(mkfifo("./pipe2",0664)==-1){perror("创建管道文件失败");return 0;}getchar();  //防止当前进程结束unlink("pipe1");unlink("pipe2");return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{//以只写的形式打开管道文件1int fd1=open("./pipe1",O_WRONLY);if(fd1 == -1){perror("open error");return -1;}printf("fd1=%d\n",fd1);//以只读的形式打开管道文件2int fd2=open("./pipe2",O_RDONLY);if(fd2 == -1){perror("open error");return -1;}printf("fd2=%d\n",fd2);//创建子进程pid_t pid1=fork();//判断读写进程if(pid1>0){//接收数据字符数组char arr[180]="";while(1){printf("请输入数据:");fgets(arr,sizeof(arr),stdin);  //向终端输入字符串arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'//向管道文件1中写入数据write(fd1,arr,strlen(arr));printf("发送成功\n");if(strcmp(arr,"q") == 0){break;}}}else if(pid1==0){//接收数据字符数组char brr[180]="";while(1){bzero(brr,sizeof(brr));   // 清空文件中读取的数据read(fd2,brr,sizeof(brr));printf("\n收到的消息为:%s\n",brr);if(strcmp(brr,"q")==0){break;}}//退出子进程exit(EXIT_SUCCESS);}wait(NULL);//关闭文件close(fd1);close(fd2);return 0;
}
#include<myhead.h>
int main(int argc, const char *argv[])
{//以只读的形式打开管道文件1int fd2=open("./pipe1",O_RDONLY);if(fd2 == -1){perror("open error");return -1;}printf("fd2=%d\n",fd2);//以只写的形式打开管道文件1int fd1=open("./pipe2",O_WRONLY);if(fd1 == -1){perror("open error");return -1;}printf("fd1=%d\n",fd1);//创建子进程pid_t pid2=fork();//判断读写进程if(pid2>0){//接收数据字符数组char brr[180]="";while(1){bzero(brr,sizeof(brr));   // 清空文件中读取的数据read(fd2,brr,sizeof(brr));printf("\n收到的消息为:%s\n",brr);if(strcmp(brr,"q")==0){break;}}}else if(pid2==0){//接收数据字符数组char arr[180]="";while(1){printf("请输入数据:");fgets(arr,sizeof(arr),stdin);  //向终端输入字符串arr[strlen(arr)-1]='\0';  //将'\n'换成'\0'//向管道文件1中写入数据write(fd1,arr,strlen(arr));printf("发送成功\n");if(strcmp(arr,"q") == 0){break;}}//退出子进程exit(EXIT_SUCCESS);}wait(NULL);//关闭文件close(fd1);close(fd2);return 0;
}

 2、思维导图

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

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

相关文章

数据结构:二叉树、堆

目录 一.树的概念 二、二叉树 1.二叉树的概念 2.特殊类型的二叉树 3.二叉树的性质 4.二叉树存储的结构 三、堆 1.堆的概念 2.堆的实现 Heap.h Heap.c 一.树的概念 注意&#xff0c;树的同一层中不能有关联&#xff0c;否侧就不是树了&#xff0c;就变成图了&#xff…

RequestBody接收参数报错com.fasterxml.jackson.databind.exc.MismatchedInputException

目录&#xff1a; 1、错误现象2、解决办法3、最终验证 1、错误现象 报错的现象和代码如下&#xff1a; 2、解决办法 查了很多都说参数类型对不上&#xff0c;但是明明是对上的&#xff0c;没有问题&#xff0c;最后只有换接收方式后验证是可以的&#xff1b;最终想了一下&…

效果不错的论文介绍:Im2Flow2Act:-跨领域机器人操控技术

Im2Flow2Act: 跨领域机器人操控技术 简介 今天介绍一个比较惊艳的论文&#xff0c;Im2Flow2Act&#xff0c;可以预测应该怎么移动图象中的物体预测移动方法完成需要执行的动作任务。 Im2Flow2Act 是一个基于学习的机器人操控框架&#xff0c;旨在通过多种数据源为机器人提供操…

计算DOTA文件的IOU

背景 在目标检测任务中&#xff0c;评估不同对象之间的重叠情况是至关重要的&#xff0c;而IOU&#xff08;Intersection Over Union&#xff09;是衡量这种重叠程度的重要指标。本文将介绍如何编写一个Python脚本&#xff0c;通过并行化处理DOTA格式的标注文件&#xff0c;统…

vue3 解决背景图与窗口留有间隙的问题

需要实现一个登录界面&#xff0c;login.vue的代码如下&#xff1a; <script> import { ref } from vue;export default {setup() {return {};}, }; </script><template><div id"login-container" class"login-container"><di…

线程的同步

文章目录 线程的同步同步&#xff1a;条件变量&#xff1a;pthread_cond_init():pthread_cond_wait()pthread_cond_signalpthread_cond_broadcast cp问题伪唤醒 信号量**多线程的互斥用信号量**&#xff1a;**单线程的互斥用锁**&#xff1a; 线程的同步 同步&#xff1a; 让…

Cesium 影像加载的TileReplacementQueue技术

本文以分析QuadtreePrimitive及相关影像内容&#xff0c;讨论一些流程和方法。影像和地形是Cesium的基础内容&#xff0c;但是有时候感觉这部分的加载和渲染效率并不高。 TileReplacementQueue是一个非常神奇的类&#xff0c;我自己研究了小半天。虽然结构简单&#xff0c;但是…

ACH支付详解,北美电商为何偏爱这一方式

ACH支付在北美广泛应用&#xff0c;低成本、可逆、安全、便捷。ZohoBooks财务管理软件支持ACH&#xff0c;可自动化处理收付款&#xff0c;提高效率并减少错误。适合北美电商客户使用&#xff0c;支持多货币和税务法规。 一、什么是ACH支付&#xff1f; ACH支付是一种通过名为…

②PROFINET转ModbusTCP, EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关

EtherCAT/Ethernet/IP/Profinet/ModbusTCP协议互转工业串口网关https://item.taobao.com/item.htm?ftt&id822721028899 协议转换通信网关 PROFINET 转 Modbus TCP &#xff08;接上一章&#xff09; 配置使用 与 PROFINET 主站进行组态说明 这里介绍与西门子 PLC 的…

大数据-180 Elasticsearch - 原理剖析 索引写入与近实时搜索

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Docker-Consul概述以及集群环境搭建

文章目录 一、Docker consul概述二、consul 部署1.consul服务器2.registrator服务器&#xff08;客户端&#xff09;2.consul-template&#xff08;在consul服务器&#xff09;3.consul 多节点 一、Docker consul概述 容器服务更新与发现&#xff1a;先发现再更新&#xff0c;…

leetcode289:生命游戏

根据 百度百科 &#xff0c; 生命游戏 &#xff0c;简称为 生命 &#xff0c;是英国数学家约翰何顿康威在 1970 年发明的细胞自动机。 给定一个包含 m n 个格子的面板&#xff0c;每一个格子都可以看成是一个细胞。每个细胞都具有一个初始状态&#xff1a; 1 即为 活细胞 &am…

ClickFix攻击活动升级:可通过虚假谷歌会议画面传播恶意软件

最近&#xff0c;研究人员报告了一种新的 ClickFix 攻击活动&#xff0c;主要通过诱骗用户访问显示虚假连接错误的欺诈性 谷歌会议的页面&#xff0c;继而借此传播信息窃取恶意软件&#xff0c;主要针对 Windows 和 macOS 操作系统。 ClickFix是网络安全公司Proofpoint在5月份…

016集——c# 实现CAD类库 与窗体的交互(CAD—C#二次开发入门)

第一步&#xff1a;搭建CAD类库dll开发环境。 第二步&#xff1a;添加窗体 第三步&#xff1a;添加控件 第四步&#xff1a;双击控件&#xff0c;在控件点击方法内输入代码 第五步&#xff1a;在主程序内实例化新建的form类&#xff0c;并弹窗form窗体 第六步&#xff1a;CAD命…

第五届人工智能与教育国际学术会议(ICAIE 2024)

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus 三、大会介绍 第五届人工智能与教育国际学术会议&#x…

学习虚幻C++开发日志——TSet

TSet 官方文档&#xff1a;虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数&#xff0c;使用数据值本身作为键&#xff0c;而不是将数据值与独立的键相关联。 默认情况下&#xff0c;TSet 不支持重…

大数据-168 Elasticsearch 单机云服务器部署运行 详细流程

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

基于stm32的4G模块点灯实验

led模块功能封装 #include "led.h" #include "sys.h"//初始化GPIO函数 void led_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE();//调用GPIO初始化函数gpio_initstruct.Pin GPIO_PIN_8 | GPIO_PIN_9;gpio_inits…

Linux基本指令一眼看懂(简洁表示)

首先先声明是简单表示&#xff0c;如果要全指令有链接 1. ls 指令 ls [选项] [文件/目录]常用选项: -l: 以长格式列出文件和目录的详细信息。 -a: 显示所有文件&#xff0c;包括隐藏文件&#xff08;以.开头的文件&#xff09;。 -h: 以人类可读的格式显示文件大小。 示例: …

基于stm32的esp8266的WIFI控制风扇实验

实验案例&#xff37;&#xff29;&#xff26;&#xff29;控制风扇 项目需求 电脑通过esp8266模块远程遥控风扇。 项目框图 ​ 风扇模块封装 #include "sys.h" #include "fan.h"void fan_init(void) {GPIO_InitTypeDef gpio_initstruct;//打开时钟…