关于进程间通信的练习

1> 使用有名管道实现,一个进程用于给另一个进程发消息,另一个进程收到消息后,展示到终端上,并且将消息保存到文件上
一份

create.c

#include<myhead.h>int main(int argc, const char *argv[])
{//创建一个管道文件if(mkfifo("./linux",0664)==-1){perror("mkfifo error");return -1;}	return 0;
}

snd.c

#include<myhead.h>int main(int argc, const char *argv[])
{//已只写的形式打开管道文件int wfd=open("./linux",O_WRONLY);if(wfd==-1){perror("open error");return -1;}printf("管道文件已打开\n");//往里面写东西char wbuf[128]="";while(1){//从终端获取要写入的内容printf("请输入>>>");fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]='\0';//将数据发送到管道文件中write(wfd,wbuf,sizeof(wbuf));//判断写入的文件if(strcmp(wbuf,"quit")==0){break;}}//关闭文件close(wfd);return 0;
}

recv.c

#include<myhead.h>int main(int argc, const char *argv[])
{//以只读的形式打开管道文件int rfd=open("./linux",O_RDONLY);if(rfd==-1){perror("open error");return -1;}printf("管道文件已打开\n");//已只写的形式打开文件int fd1=open("./file.text",O_WRONLY|O_CREAT|O_TRUNC,0664);if(fd1==-1){perror("open error");return -1;}	char rbuf[128]="";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//读取信息read(rfd,rbuf,sizeof(rbuf));//判断读取的文件if(strcmp(rbuf,"quit")==0){break;}//将读取内容展示到终端printf("%s\n",rbuf);//将读取的内容写入到文件中write(fd1,rbuf,sizeof(rbuf));//手动添加换行char a='\n';write(fd1,&a,1);}//关闭文件close(rfd);close(fd1);return 0;
}

2> 使用有名管道实现两个进程间相互通信

create.c

#include<myhead.h>int main(int argc, const char *argv[])
{//创建管道1if(mkfifo("./liunx1",0664)==-1){perror("mkfifo error");return -1;}//创建管道2if(mkfifo("./liunx2",0664)==-1){perror("mkfifo error");return -1;}	return 0;
}

snd.c

#include<myhead.h>int main(int argc, const char *argv[])
{//创建管道1if(mkfifo("./liunx1",0664)==-1){perror("mkfifo error");return -1;}//创建管道2if(mkfifo("./liunx2",0664)==-1){perror("mkfifo error");return -1;}	return 0;
}
ubuntu@ubuntu:work2$ cat snd.c 
#include<myhead.h>int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid<0){perror("fork error");return -1;}else if(pid==0){//以只写的形式打开管道2int wfd=open("./liunx2",O_WRONLY);if(wfd==-1){perror("open error");return -1;}char wbuf[128]="";while(1){printf("请输入>>>");//把终端输入的内容写入容器中fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;//再写入到管道文件中write(wfd,wbuf,strlen(wbuf));//判断写入的内容if(strcmp(wbuf,"quit")==0){break;}}//关闭文件close(wfd);exit(EXIT_SUCCESS);}//以只读的形式打开管道1int rfd=open("./liunx1",O_RDONLY);if(rfd==-1){perror("open error");return -1;}char rbuf[128]="";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//读取管道1中的内容read(rfd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}	printf("收到的信息为:%s\n",rbuf);}//关闭文件close(rfd);wait(NULL);return 0;
}

recv.c

#include<myhead.h>int main(int argc, const char *argv[])
{pid_t pid=fork();if(pid<0){perror("fork error");return -1;}else if(pid==0){	//以只读的形式打开管道2int rfd=open("./liunx2",O_RDONLY);if(rfd==-1){perror("open error");return -1;}char rbuf[128]="";while(1){//清空容器bzero(rbuf,sizeof(rbuf));//读取管道1中的内容read(rfd,rbuf,sizeof(rbuf));if(strcmp(rbuf,"quit")==0){break;}	printf("收到的信息为:%s\n",rbuf);}//关闭文件close(rfd);exit(EXIT_SUCCESS);}//以只写的形式打开管道1int wfd=open("./liunx1",O_WRONLY);if(wfd==-1){perror("open error");return -1;}char wbuf[128]="";while(1){printf("请输入>>>");//把终端输入的内容写入容器中fgets(wbuf,sizeof(wbuf),stdin);wbuf[strlen(wbuf)-1]=0;//再写入到管道文件中write(wfd,wbuf,strlen(wbuf));//判断写入的内容if(strcmp(wbuf,"quit")==0){break;}}//关闭文件close(wfd);wait(NULL);return 0;
}

思维导图

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

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

相关文章

RabbitMQ docker安装

后台配置文件 rabbitmq:image: rabbitmq:latestcontainer_name: rabbitmqports:- "5672:5672" # RabbitMQ server port- "15672:15672" # RabbitMQ management console portenvironment:RABBITMQ_DEFAULT_USER: adminRABBITMQ_DEFAULT_PASS: admin 若要打…

磁盘无法访问的危机与解救:数之寻软件的数据恢复之旅

在数字时代&#xff0c;磁盘作为数据存储的核心&#xff0c;承载着我们的工作文档、珍贵照片、个人视频等无价之宝。然而&#xff0c;当您试图访问某个磁盘时&#xff0c;却遭遇了“磁盘无法访问”的提示&#xff0c;这无疑是一场突如其来的数据危机。本文将深入探讨磁盘无法访…

【Kubernetes】k8s集群资源调度

目录 一、k8s的List-Watch机制 二、scheduler的调度过程 三、指定节点调度Pod 1.通过nodeName调度Pod 2.通过节点标签选择器调度Pod 3.通过亲和性调度Pod 1&#xff09;节点亲和性 2&#xff09;Pod 亲和性 四、污点(Taint) 和 容忍(Tolerations) 1.污点(Taint) 2.…

运行pytorch报异常处理

一、问题现象及初步定位&#xff1a; 找不到指定的模块。 Error loading "D:\software\python3\Lib\site-packages\torch\lib\fbgemm.dll 此处缺少.dll文件&#xff0c;首先下载文件依赖分析工具 Dependencies https://github.com/lucasg/Dependencies/tree/v1.11.1 之后下…

【大模型学习】多模态大模型进行偏好优化

一、简介 训练模型以理解并预测人类偏好是一项复杂的任务。传统方法如SFT&#xff08;监督微调&#xff09;通常需要较高的成本&#xff0c;因为这些算法需要对数据进行特定标签的标注。偏好优化&#xff08;Preference Optimization&#xff09;作为一种替代方案&#xff0c;…

【多线程-从零开始-捌】阻塞队列,消费者生产者模型

什么是阻塞队列 阻塞队里是在普通的队列&#xff08;先进先出队列&#xff09;基础上&#xff0c;做出了扩充 线程安全 标准库中原有的队列 Queue 和其子类&#xff0c;默认都是线程不安全的 具有阻塞特性 如果队列为空&#xff0c;进行出队列操作&#xff0c;此时就会出现阻…

C++ 重要特性探究

shared_from_this 使用分析 场景 类的成员函数需要获取指向自身的shared_ptr的时候类成员函数传递shared_ptr给其他函数或者对象的时候&#xff0c;目的是为了管理对象生命周期使用方法 首先类必须继承 std::enable_shared_from_this<T>必须使用 shared_from_this 获取指…

智慧交通:将物联网与人工智能完美融合

智慧交通是当今社会面临的一个重要挑战&#xff0c;也是人们生活质量提高的一个重要方面。通过将物联网技术与人工智能相结合&#xff0c;我们能够实现智慧交通系统的全面升级和优化&#xff0c;为人们带来更加便捷、高效和安全的出行体验。 在智慧交通领域&#xff0c;物联网…

电脑图片损坏打不开怎么办?能修复吗?

照片和视频是记录和保存现实生活中的事件的最好方式。由于手机储存空间有限&#xff0c;一般我们会把有纪念意义的照片放到电脑上进行保存&#xff0c;但有时难免会遇到照片被损坏打不开的情况&#xff0c;一旦遇到这种情况&#xff0c;先不要急&#xff0c;也不要因为照片打不…

【智能控制】第7章 神经网络理论基础,神经网络的分类,原理,发展,神经网络学习算法(北京航天航空大学)

目录 第7章 神经网络理论基础 1. 神经网络的发展 2. 神经网络原理 3. 神经网络的分类 (1) 前向网络 (2) 反馈网络 (3) 自组织网络 4. 神经网络学习算法 (1) 智能Hebb学习规则 (2) Delta&#xff08;δ&#xff09;学习规则 5. 神经网络的特征及…

【Mind+】 掌控板入门教程09 魔法之光

光是地球生命的来源&#xff0c;是人类生活的依据&#xff0c;更是人类认识外部世界的工具。在科技发达的今天&#xff0c;我们可以通过传感器来检测光&#xff0c;利用光帮助我们更好的生活。 今天就让我们一起通过几个小项目来感受光的魔法吧。 项目示例 掌控板…

经验是负债,学习是资产

经验是负债&#xff0c;学习是资产 经验是负债&#xff0c;学习是资产。这是李嘉诚先生的一句名言。他一语道出了学习在企业发展中的推动作用。 企业家经营的目的&#xff0c;无非就是将利润最大化。企业能够产生利润&#xff0c;靠的是提升自身业绩、降低运营成本&#xff0c;…

使用 Java Swing 创建一个最大公约数计算器 GUI 应用

使用Java语言,设计一个程序,实现求取两个正整数的最大公约数。 比较基础的一个Java小程序。 1、效果展示 2、程序代码 package demo; import javax.swing.*; import java.awt.*;

Kafka基本讲解

Kafka基本讲解 一&#xff1a;Kafka介绍 Kafka是分布式消息队列&#xff0c;主要设计用于高吞吐量的数据处理和消息传输&#xff0c;适用于日志处理、实时数据管道等场景。Kafka作为实时数仓架构的核心组件&#xff0c;用于收集、缓存和分发实时数据流&#xff0c;支持复杂的…

【博客搭建 第二篇章】项目中怎么引入其他的 icon

一、注册账号并将图标添加到自己的项目中 1、网站地址&#xff1a;https://www.iconfont.cn/ 2、注册 iconfont 账号 3、登录 iconfont 网站中 4、添加图标到购物车中 5、添加图标到项目中 6、生成在线连接 7、复制连接 二、项目中配置连接地址 找到项目中的 them…

R语言医疗数据分析笔记

分组因子又是什么意思&#xff0c;分组因子和数组的区别是什么 举个实际的例子 分组因子 分组因子是分类变量&#xff0c;用于将数据分成不同组以便于比较或分析。例如&#xff0c;在一项研究中&#xff0c;研究对象的性别&#xff08;男性和女性&#xff09;可以视为一个分组…

OBC充电机电力系统的安全保障

OBC&#xff08;On-Board Charger&#xff09;充电机是电动汽车的关键部件&#xff0c;它负责将外部交流电转换为直流电&#xff0c;为电动汽车的动力电池充电。因此&#xff0c;OBC充电机的电力系统安全保障至关重要。 首先&#xff0c;OBC充电机需要有良好的电气隔离和保护功…

【mysql 第三篇章】一条 update语句是怎么持久化到磁盘上的?

首先看一下这个 SQL 语句你会不会写? 下面是说明执行这个 SQL 语句&#xff0c;数据库底层做了什么操作。 update users set namexxx where id10;在引擎要执行更新语句的时候&#xff0c;比如更新 id10 这行数据时&#xff0c;他会先查看数据在缓冲池中是否存在&#xff0c;如…

C语言指针详解-包过系列(二)目录版

C语言指针详解-包过系列&#xff08;二&#xff09;目录版 1、数组名的深入理解1.1、数组名的本质1.2、数组名本质的两个例外1.2.1、sizeof&#xff08;数组名&#xff09;1.2.2、&数组名 2、使用指针访问数组3、一维数组传参本质4、二级指针4.1、二级指针介绍4.2、二级指针…

8.9 C++

1.思维导图 2. 搭建一个货币的场景&#xff0c;创建一个名为 RMB 的类&#xff0c;该类具有整型私有成员变量 yuan&#xff08;元&#xff09;、jiao&#xff08;角&#xff09;和 fen&#xff08;分&#xff09;&#xff0c;并且具有以下功能&#xff1a; (1)重载算术运算符…