2024/02/23

 使用消息队列完成两个进程间相互通信

A.c

#include<myhead.h>
struct msgbuf
{
	long mtype;
	char mtext[1024];
};
//定义表示正文内容大小的宏
#define MSGSIZE sizeof(struct msgbuf)-sizeof(long)

int main(int argc, const char *argv[])
{
	//创建一个key值
	key_t key;
	key=ftok("/",'k');
	if(key==-1)
	{
		perror("ftok error");
		return -1;
	}
	printf("ftok success key=%d\n",key);
 
	//通过key值创建消息队列
	int msqid=-1;
	if((msqid=msgget(key,IPC_CREAT|0664))==-1)
	{
		perror("msgget error");
		return -1;
	}
	printf("msgget success msqid=%d\n",msqid);

	//创建父子进程
	pid_t pid;
	pid=fork();
	if(pid>0)
	{
		//父进程,向消息队列中放入类型1的数据
		struct msgbuf wbuf;
		wbuf.mtype=1;
		while(1)
		{
			bzero(wbuf.mtext,sizeof(wbuf.mtext));
			printf("请输入内容:");
			fgets(wbuf.mtext,sizeof(wbuf.mtext),stdin);
			wbuf.mtext[strlen(wbuf.mtext)-1]=0;

			//将消息放入队列中
			msgsnd(msqid,&wbuf,MSGSIZE,0);
			printf("发送成功\n");
			if(strcmp(wbuf.mtext,"quit")==0)
			{
				break;
			}
		}

	}
	else if(pid==0)
	{
		//子进程,向消息队列中放入类型2的数据
		struct msgbuf rbuf;
		while(1)
		{
			bzero(rbuf.mtext,sizeof(rbuf.mtext));
		
			msgrcv(msqid,&rbuf,MSGSIZE,2,0);
			printf("收到的消息为:%s\n",rbuf.mtext);
		
			if(strcmp(rbuf.mtext,"quit")==0)
			{
				break;
			}
		}
	}

	else
	{
		perror("fork error");
		return -1;
	}
	
	return 0;
}

B.c

#include <myhead.h>
struct msgbuf
{
	long mtype;
	char mtext[1024];
};
//定义一个表示消息正文内容的大小的宏
#define MSGSIZE sizeof(struct msgbuf)-sizeof(long)
 
int main(int argc, const char *argv[])
{
	//创建一个key值
	key_t key;
	key=ftok("/",'k');
	if(key==-1)
	{
		perror("ftok error");
		return -1;
	}
	printf("ftok success key=%d\n",key);
 
	//通过key值创建消息队列
	int msqid=-1;
	if((msqid=msgget(key,IPC_CREAT|0664))==-1)
	{
		perror("msgget error");
		return -1;
	}
	printf("msgget success msqid=%d\n",msqid);
 
	//创建父子进程
	pid_t pid;
	pid=fork();
	if(pid>0)
	{
		//父进程,向消息队列中读取类型1的数据
		struct msgbuf rbuf;
		rbuf.mtype=1;	

		while(1)
			{
				bzero(rbuf.mtext,sizeof(rbuf.mtext));
				//从消息队列中读取一个消息
				msgrcv(msqid,&rbuf,MSGSIZE,1,0);
				printf("收到的消息为:%s\n",rbuf.mtext);
				if(strcmp(rbuf.mtext,"quit")==0)
				{
					break;
				}
			}
 
 
		
 
 
	}else if(pid==0)
	{
		//子进程,向消息队列中写入类型为2的数据
		struct msgbuf wbuf;
		wbuf.mtype=2;
		while(1)
		{
			bzero(wbuf.mtext,sizeof(wbuf.mtext));
			printf("请输入内容:");
			fgets(wbuf.mtext,sizeof(wbuf.mtext),stdin);
			wbuf.mtext[strlen(wbuf.mtext)]=0;
			//将消息放入队列中
			msgsnd(msqid,&wbuf,MSGSIZE,0);
			printf("发送成功\n");
			if(strcmp(wbuf.mtext,"quit")==0)
			{
				break;
			}
		}
 
	}else
	{
		perror("fork error");
		return -1;
	}
 
	return 0;
}

B.c

思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

知乎66条高赞回答,句句醍醐灌顶!

-01- 穷人是小心翼翼地大方&#xff0c; 有钱人是大大方方地小气。 ——论如何判断一个人是真有钱还是装有钱 -02- 枕头要常晒&#xff0c; 因为里面装满了心酸的泪和发霉的梦。 ——一切终将随风而逝 -03- 人活得累&#xff0c;一是太认真&#xff0c;二是太想要。 …

第3部分 原理篇2去中心化数字身份标识符(DID)(3)

3.2.2.4. DID文档 (DID Document) 本聪老师&#xff1a;DID标识符和DID URL还都只是ID&#xff0c;必须为它附加一个基本属性才可以证明是该主体独有的。这个就是我们下面介绍的DID文档。 本聪老师&#xff1a;每个DID标识符都唯一对应一个DID文档&#xff0c;也可以说&#x…

计算机功能简介:EC, NVMe, SCSI/ISCSI与块存储接口 RBD,NUMA

一 EC是指Embedded Controller 主要应用于移动计算机系统和嵌入式计算机系统中&#xff0c;为此类计算机提供系统管理功能。EC的主要功能是控制计算机主板上电时序、管理电池充电和放电&#xff0c;提供键盘矩阵接口、智能风扇接口、串口、GPIO、PS/2等常规IO功能&#xff0c;…

docker自定义网络实现容器之间的通信

Background docker原理 docker是一个Client-Server结构的系统&#xff0c;Docker的守护进程运行在主机上。通过Socket从客户端访问。docker核心三大组件&#xff1a;image–镜像、container-容器、 repository-仓库。docker使用的cpu、内存以及系统内核等资源都是直接使用宿主…

A Novel Two-Layer DAG-based Reactive Protocol for IoT Data Reliability in Metaverse

在IOT 场景中&#xff0c;需要保证数据的完整性和可靠性。通常区块链可以用来做这件事&#xff0c;但是IoT 设备的计算能力和贷款都是有限的。 对于PBFT 要求的通信量太大。 本文提出的 two layer directed acycle graph (2LDAG) 是一种被动共识协议&#xff0c;除非有节点主动…

快速构建 Debezium MySQL Example 数据库

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

EXCEL 在列不同单元格之间插入N个空行

1、第一步数据&#xff0c;要求在每个数字之间之间插入3个空格 2、拿数据个数*&#xff08;要插入空格数1&#xff09; 19*4 3、填充 4、复制数据到D列 5、下拉数据&#xff0c;选择复制填充这样1-19就会重复4次 6、全选数据D列排序&#xff0c;这样即完成了插入空格 以…

SQL语法-DQL-测试练习

因篇幅原因&#xff0c;本篇承接此篇->第八篇&#xff1a;SQL语法-DQL-数据查询语言-CSDN博客 本篇是对于SQL语法DQL语句的练习&#xff0c;因水平和精力有限&#xff08;就不像前两篇的DDL&#xff0c;DML那样自出练习了&#xff09;直接照搬了【黑马程序员】在哔哩哔哩的…

基于卷积神经网络的图像去噪

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 基于卷积神经网络的图像去噪 完整代码:基于卷积神经网络的图像去噪.rar资源-CSDN文库 https://download.csdn.net/download/abc9918351…

如何在java中使用 Excel 动态函数生成依赖列表

前言 在Excel 中&#xff0c;依赖列表或级联下拉列表表示两个或多个列表&#xff0c;其中一个列表的项根据另一个列表而变化。依赖列表通常用于Excel的业务报告&#xff0c;例如学术记分卡中的【班级-学生】列表、区域销售报告中的【区域-国家/地区】列表、人口仪表板中的【年…

vue3 + ts + echart 实现柱形图表

首先封装Echart一个文件 代码如下 <script setup lang"ts"> import { ECharts, EChartsOption, init } from echarts; import { ref, watch, onMounted, onBeforeUnmount } from vue;// 定义props interface Props {width?: string;height?: string;optio…

网工内推 | 信息安全售前,国企、上市公司,补贴福利多

01 中电科网络安全科技有限公司 招聘岗位&#xff1a;信息安全售前工程师 职责描述&#xff1a; 1.负责为客户提供整体信息安全规划、IT治理需求调研、现状分析、蓝图规划与实施路线设计&#xff0c;为客户提供设计方案&#xff1b; 2.承担行业信息安全发展研究、行业业务规划…

vue3 vuex

目录 Vuex 是什么 什么是“状态管理模式”&#xff1f; 什么情况下我应该使用 Vuex&#xff1f; 使用方法&#xff1a; 提交载荷&#xff08;Payload&#xff09; 对象风格的提交方式 使用常量替代 Mutation 事件类型 Mutation 必须是同步函数 在组件中提交 Mutation …

sentinel中监听器的运用--规则管理

sentinel中监听器的运用–规则管理 规则结构 类图关系 类关系图如下 Rule 将规则抽象成一个类, 规则与资源是紧密关联的, 也就是说规则作用于资源。因此, 我们需要将规则表示为一个类, 并包含一个获取资源的方法 这里采用接口的原因就是规则是一个抽象概念而非具体实现。…

导入excel某些数值是0

目录 导入excel某些数值是0数据全部都是0原因解决 部分数据是0原因解决 导入excel某些数值是0 数据全部都是0 有一列“工单本月入库重量”全部的数据都是0 原因 展示的时候&#xff0c;展示的字段和内表需要展示的字段不一致&#xff0c;导致显示的是0。 解决 修改展示的字…

Vue | (四)使用Vue脚手架(上) | 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;初始化脚手架&#x1f407;创建初体验&#x1f407;分析脚手架结构&#x1f407;关于render&#x1f407;查看默认配置 &#x1f4da;ref与props&#x1f407;ref属性&#x1f407;props配置项 &#x1f4da;混入&#x1f4da;插件&#x1f4da;scoped样…

DBeaver的下载安装和连接MySQL数据库

DBeaver的下载安装和连接MySQL数据库 1、dbeaver的下载 dbeaver是一款的数据库连接工具&#xff0c;免费&#xff0c;跨平台。 官网&#xff1a;https://dbeaver.io/ 下载地址&#xff1a;https://dbeaver.io/download/ GitHub下载地址&#xff1a;https://github.com/dbeav…

使用向量数据库pinecone构建应用02:检索增强生成RAG

Building Applications with Vector Databases 下面是这门课的学习笔记&#xff1a;https://www.deeplearning.ai/short-courses/building-applications-vector-databases/ Learn to create six exciting applications of vector databases and implement them using Pinecon…

记一次 Flink 作业启动缓慢

记一次 Flink 作业启动缓慢 背景 应用发现&#xff0c;Hadoop集群的hdfs较之前更加缓慢&#xff0c;且离线ELT任务也以前晚半个多小时才能跑完。此前一直没有找到突破口所以没有管他&#xff0c;推测应该重启一下Hadoop集群就可以了。今天突然要重启一个Flink作业&#xff0c…

基于springboot+vue的中小型医院网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…