1.8 day6 IO进程线程

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

 进程A

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建两个文件描述符用于打开两个管道int fd1=-1;int fd2=-1;//创建一个子进程int pid=-1;if((fd1=open("./mkfifo1",O_RDWR))==-1){perror("open error");return -1;}if((fd2=open("./mkfifo2",O_RDWR))==-1){perror("open error");return -1;}pid=fork();if(pid==0){//子char rbuf[128]="";//创建一个用于接收进程B发来的消息的容器while(1){bzero(rbuf,sizeof(rbuf));//容器清零read(fd1,rbuf,sizeof(rbuf));//读取数据printf("收到消息:%s\n",rbuf);if(strcmp(rbuf,"quit")==0)//退出条件{break;}}close(fd1);//关闭管道close(fd2);exit(EXIT_SUCCESS);//关闭子进程}else if(pid>0){//父char wbuf[128]="";//创建一个用于向进程B写入数据的容器while(1){bzero(wbuf,sizeof(wbuf));//容器清零read(0,wbuf,sizeof(wbuf));//终端写入wbuf[strlen(wbuf)-1]=0;//将'\n'替换成'\0'write(fd2,wbuf,sizeof(wbuf));//写入数据if(strcmp(wbuf,"quit")==0){break;}}close(fd1);close(fd2);wait(NULL);//回收子进程}else{perror("fork error");return -1;}return 0;
}

 进程B

#include <myhead.h>
int main(int argc, const char *argv[])
{int fd1=-1;int fd2=-1;int pid=-1;if((fd1=open("./mkfifo1",O_RDWR))==-1){perror("open error");return -1;}if((fd2=open("./mkfifo2",O_RDWR))==-1){perror("open error");return -1;}pid=fork();if(pid==0){//子char wbuf[128]="";while(1){bzero(wbuf,sizeof(wbuf));read(0,wbuf,sizeof(wbuf));wbuf[strlen(wbuf)-1]=0;write(fd1,wbuf,sizeof(wbuf));if(strcmp(wbuf,"quit")==0){break;}}close(fd1);close(fd2);exit(EXIT_SUCCESS);}else if(pid>0){//父char rbuf[128]="";while(1){bzero(rbuf,sizeof(rbuf));read(fd2,rbuf,sizeof(rbuf));printf("收到消息:%s\n",rbuf);if(strcmp(rbuf,"quit")==0){break;}}close(fd1);close(fd2);wait(NULL);}else{perror("fork error");return -1;}return 0;
}

两个有名管道

#include <myhead.h>
int main(int argc, const char *argv[])
{//创建两个有名管道if(mkfifo("./mkfifo1",0664)==-1){perror("mkfifo1 error");return -1;}if(mkfifo("./mkfifo2",0664)==-1){perror("mkfifo2 error");return -1;}getchar();//自此处阻塞system("rm mkfifo1 mkfifo2");//结束时删除两个有名管道return 0;
}

 效果图

 

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

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

相关文章

深度学习 基本理论 3 :物体检测(Anchor base/NMS/softmax/损失函数/BCE/CE/zip

1、 Anchor base和Anchor free 1.1 Anchor base Anchor base&#xff0c;译为基于锚点的一个物体检测方法&#xff0c;也可以叫做基于一组预定义的框模型会预测每个锚点是否存在对象&#xff0c;并预测需要对锚点进行的调整以更好地适应该对象Anchor base物体检测方法&#x…

STM32-04-STM32时钟树

STM32时钟树 什么是时钟&#xff1f; 时钟是具有周期性的脉冲信号&#xff0c;最常用的是占空比50%的方波。&#xff08;时钟是单片机的脉搏&#xff0c;搞懂时钟走向及关系&#xff0c;对单片机使用至关重要&#xff09;。 时钟树 时钟源 2个外部时钟源 高速外部振荡器(HSE…

教你如何将本地虚拟机变成服务器,供其它电脑访问

场景&#xff1a;最近在做数据仓库的作业&#xff0c;需要团队协作&#xff0c;买不起阿里云服务器&#xff0c;所以想到能不能将我本地机上的虚拟机变成服务器&#xff0c;供其它同学的电脑访问。在虚拟机上安装hadoop和hive&#xff0c;然后同学机子上安装kettle进行连接。最…

离线安装jenkins:使用rpm安装包

目录 一、安装jdk1.8二、安装yum软件包三、下载rmp安装包四、安装jenkins的rpm安装包五、创建jenkins文件目录六、设置环境变量七、配置jdk位置八、配置Jenkins配置文件九、启动Jenkins十、访问Jenkins十一、安装Jenkins插件 一、安装jdk1.8 根据博客Linux操作系统安装jdk1.8并…

实战经验分享,Python 连接 Oracle 踩坑实录

最近的一个测试任务需要测试 oracle 同步 hive 数据库的性能&#xff0c;那就需要对 oracle 数据库灌注测试数据。我就又打开了我的IDE&#xff0c;准备把我之前一下可以灌50w数据到 MySQL 的代码&#xff0c;改一改&#xff0c;直接用。 因为我在网上看到&#xff0c;语法上也…

网络安全复习--简答整理

-----------------------------------------------------教材如上图------------------------------------------------------------ 1.对称加密和非对称加密各有什么特点&#xff1f;加密解密过程中有什么区别&#xff1f;优点P38【考】 对称加密的特点&#xff1a;在针对同一…

MVC设计模式和与三层架构的关系

MVC设计模式和与三层架构的关系 MVC是一种设计模式&#xff0c;将软件按照模型、视图、控制器来划分&#xff1a; M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为数据承载Bean&#x…

http1 http2 http3的区别

HTTP/1.1、HTTP/2和HTTP/3是HTTP协议的不同版本&#xff0c;它们在性能、效率和安全性方面有一些区别。 HTTP/1.1&#xff1a;HTTP/1.1是最早的HTTP版本&#xff0c;它使用传统的文本格式进行通信。它的主要特点是每个请求需要建立一个新的TCP连接&#xff0c;这称为"串行…

用C语言实现动态数组Vector

代码仓库地址 1. 动态数组原理 定义一个结构体类型&#xff0c;在结构体中用指针指向一个在堆空间开辟的一块内存。 2. 编写头文件 在头文件里定义Vector的数据结构和相关操作&#xff0c;可以通过修改 “typedef char* Element;” 来修改存储的数据的类型&#xff1b; #ifn…

python代码 重命名指定目录下 文件夹 or 文件

代码十几秒的事,为什么要手动去改一天呢!直接放源码~ 重命名指定目录下所有文件夹 import os import redef extract_first_three_numbers_from_folder_name(folder_name):numbers = re.findall(r\d+, folder_name)return numbers[:3]def rename_folders_with_prefixes(dire…

歌手荆涛演唱的春节回家:传统与现代的交织,歌声里的乡愁与期盼

随着冬日渐寒&#xff0c;春节的脚步愈发临近。这是一个充满温馨与期待的时刻&#xff0c;一个穿越时空、凝聚亿万华夏儿女情感的盛大节日。春节&#xff0c;它不仅仅是一个传统习俗的展现&#xff0c;更是一种心灵的归宿&#xff0c;一种文化的传承。 在悠久的历史长河中&…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法&#xff0c;它在程序控制流图的基础上&#xff0c;通过分析控制构造的环行复杂性&#xff0c;导出基本可执行路径集合&#xff0c;从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…

很有用!小企业如何从零开始制作产品手册?

对于初创公司和小企业来说&#xff0c;创造一份高效、吸引人的产品手册可能不是特别简单&#xff0c;特别是当资源和预算有限的时候。然而&#xff0c;一份良好的产品手册可以帮助你传达你的品牌故事&#xff0c;展示你的产品&#xff0c;甚至可以帮助你提高销售额&#xff0c;…

泛型编程-常用模板

例举C11 常用模板 一.变参模板 当我们需要处理不定数量的参数时&#xff0c;C的变参模板&#xff08;variadic templates&#xff09;提供了一种灵活的解决方案。变参模板允许我们定义接受任意数量参数的函数或类模板。 变参模板主要分为三部分&#xff1a; 模板形参包&#x…

Transformers 2023年度回顾 :从BERT到GPT4

人工智能已成为近年来最受关注的话题之一&#xff0c;由于神经网络的发展&#xff0c;曾经被认为纯粹是科幻小说中的服务现在正在成为现实。从对话代理到媒体内容生成&#xff0c;人工智能正在改变我们与技术互动的方式。特别是机器学习 (ML) 模型在自然语言处理 (NLP) 领域取得…

【仙丹秘法】如何炼制一颗稳定的仙丹

提示词始终保持不变 1&#xff1a;收集素材 制作lora_v1 2: 制作lora_v1 产生 1个人物 含 你想要的服装 导入 pose_1 到 control 1 生成人物 (white_background:1.1),front view,1boy,blue sleeveless t-shirt,blue shorts,detailed eyes,best quality,masterpiece,high res…

第三站:C/C++基础-二维数组

二维数组的概念 一维数组本身是多个大小相同的内存块,从0开始逐渐递增所组成的在横向上的有序"组合", 二维数组就是很多个一维数组在纵向上的组合,每一个一维数组就是二维数组在纵向上的从0开始的逐渐递增的一个单位,(所以一维数组在二维数组的基础上,每一个内存块…

L1-010 比较大小(Java)

题目 本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数&#xff0c;其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出&#xff0c;其间以“->”相连。输入样例: 4 2 8 输出样例: 2->4->8解题思路 输入三个整数&#xff1a;…

Spring 基于注解的AOP见解4

5.基于注解的AOP配置 5.1创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&…

SUDA-计算机网路-期末复习提纲

写在前面 帮苏大的同学整理的计网复习材料&#xff0c;用的是他们老师划定的范围。 1.负责互联网协议开发、标准制定、地址分配的国际组织名称及其主要职责 (1) 地址支持组织&#xff08;ASO&#xff09;负责IP地址系统的管理。 (2) 域名支持组织&#xff08;DNSO&#xff09;…