2023/9/30 使用消息队列完成进程间通信

news2024/11/27 15:48:47

发送方

​
#include <myhead.h>
//消息结构体
typedef struct
{
	long msgtype; //消息类型
	char data[1024]; //消息正文
}Msg_ds;

#define SIZE sizeof(Msg_ds) - sizeof(long)    //正文大小
int main(int argc, const char *argv[])
{
	//1.创建key值
	key_t key ;
	if((key = ftok("/",'k')) == -1)
	{
		perror("ftok error");
		return -1;
	}

	//2.创建消息队列
	int msgid;
	if((msgid = msgget(key,IPC_CREAT|0664)) == -1)
	{
		perror("msgget error");
		return -1;
	}

	//3.向消息队列中发送数据,需要定义结构体
	Msg_ds msg = {.msgtype = 100};
	while(1)
	{
		printf("请输入消息内容:");
		fgets(msg.data,sizeof(msg.data),stdin);  //从终端输入字符串
		//将字符串的'\n'换成'\0'
		msg.data[strlen(msg.data)-1] = '\0';
		
		//将消息发送到消息队列中
		if(msgsnd(msgid,&msg,SIZE,0) == -1)
		{
			perror("msgsnd error");
			return -1;
		}

		if(strcmp(msg.data,"quit") == 0)
		{
			break;
		}
	}

	return 0;
}

​

接收方
 

#include <myhead.h>
//消息结构体
typedef struct
{
	long msgtype; //消息类型
	char data[1024]; //消息正文
}Msg_ds;

#define SIZE sizeof(Msg_ds) - sizeof(long)    //正文大小
int main(int argc, const char *argv[])
{
	//1.创建key值
	key_t key ;
	if((key = ftok("/",'k')) == -1)
	{
		perror("ftok error");
		return -1;
	}

	//2.创建消息队列
	int msgid;
	if((msgid = msgget(key,IPC_CREAT|0664)) == -1)
	{
		perror("msgget error");
		return -1;
	}

	//3.从消息队列中取数据,需要定义结构体
	Msg_ds msg;
	while(1)
	{
				
		//从消息队列中取数据
		//第一个0表示取消息的类型,每次都是取第一个
		//第二个0表示阻塞方式从消息队列中取数据
		if(msgrcv(msgid,&msg,SIZE,0,0) == -1)
		{
			perror("msgsnd error");
			return -1;
		}

		if(strcmp(msg.data,"quit") == 0)
		{
			break;
		}
		printf("rcv:%s\n",msg.data);
	}

	//4.删除消息队列
	msgctl(msgid,IPC_RMID,NULL);
	return 0;
}

实验效果图

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

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

相关文章

中断向量控制器(NVIC)

1. 什么是中断 在处理器中&#xff0c;中断是一个过程&#xff0c;即CPU在正常执行程序的过程中&#xff0c;遇到外部/内部的紧急事件需要处理&#xff0c;暂时中止当前程序的执行&#xff0c;转而去为处理紧急的事件&#xff0c;待处理完毕后再返回被打断的程序处继续往下执行…

Spring MVC 中的国际化和本地化

Spring MVC 中的国际化和本地化 国际化&#xff08;Internationalization&#xff0c;简称i18n&#xff09;和本地化&#xff08;Localization&#xff0c;简称l10n&#xff09;是构建多语言应用程序的重要概念。Spring MVC提供了丰富的支持&#xff0c;使开发人员能够轻松地处…

Python 笔记06(Mysql数据库)

一 基础 1.1 安装 MySQL下载参考&#xff1a;MySQL8.0安装配置教程【超级详细图解】-CSDN博客 测试是否安装并正确配置环境变量&#xff1a; 1.2 查看服务器是否正常运行 1.3 显示数据库 show databases; 1.4 退出 exit 1.5 python 连接 1.6 查主机IP ipconfig

2.springboot代理调用

1.概述 本文介绍在方法上开启声明式事务Transactional后(使用InfrastructureAdvisorAutoProxyCreator创建jdk动态代理)&#xff0c;springboot的调用该方法的过程&#xff1b; 2.结论(重点) 在方法开启声明式事务后&#xff0c;spring会为该对象创建动态代理。spring容器为该…

Android Jetpack组件架构:ViewModel的原理

Android Jetpack组件架构&#xff1a;ViewModel的原理 导言 本篇文章是关于介绍ViewModel的&#xff0c;由于ViewModel的使用还是挺简单的&#xff0c;这里就不再介绍其的基本应用&#xff0c;我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知&#xff0c;一般…

聚观早报 | 2024款小鹏P5全新发布;华为发布13.2英寸MatePad Pro

【聚观365】9月26日消息 2024款小鹏P5全新发布 华为发布13.2英寸MatePad Pro 特斯拉发布人形机器人最新进展 百川智能发布Baichuan2-53B 软件行业仍将人才供不应求 2024款小鹏P5全新发布 继2024款小鹏G9问世仅一周&#xff0c;小鹏汽车再度发力新产品&#xff0c;2024款小…

【小沐学前端】Node.js实现UDP通信

文章目录 1、简介2、下载和安装3、代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 结语 1、简介 Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源和跨平台的 JavaScript 运行时环境。 它是几乎任何类型项目的流行工具&#xff01; Node.js 在浏览器之外…

2.4g无线收发芯片:Ci24R1(DFN8)

Ci24R1 采用GFSK/FSK数字调制与解调技术。数据传输速率与PA输出功率都可以调节&#xff0c;支持2Mbps, 1Mbps, 250Kbps三种数据速率。高的数据速率可以在更短的时间完成同样的数据收发&#xff0c;因此可以具有更低的功耗。 Ci24R1 是一颗工作在2.4GHz ISM频段&#xff0c;专为…

医疗实施-住院流程详解

住院就诊流程详解 1.病人入院登记2.病人进入病区3.医生操作病人4.医嘱录入与审核执行5. 医嘱收费前在对应业务系统的操作5.1.药物医嘱5.2.检查检验医嘱5.3.手术医嘱 6.住院医嘱费用的产生7. 医嘱收费后在对应业务系统的操作8. 病人出院 这篇文章是基于我的文章《医疗实施-住院就…

8.3Jmeter使用json提取器提取数组值并循环(循环控制器)遍历使用

Jmeter使用json提取器提取数组值并循环遍历使用 响应返回值例如&#xff1a; {"code":0,"data":{"totalCount":11,"pageSize":100,"totalPage":1,"currPage":1,"list":[{"structuredId":&q…

[React] 性能优化相关

文章目录 1.React.memo2.useMemo3.useCallback4.useTransition5.useDeferredValue 1.React.memo 当父组件被重新渲染的时候&#xff0c;也会触发子组件的重新渲染&#xff0c;这样就多出了无意义的性能开销。如果子组件的状态没有发生变化&#xff0c;则子组件是不需要被重新渲…

百度网盘的扩容

百度网盘的扩容怎么扩 百度网盘的扩容通常需要购买额外的存储空间。以下是扩容百度网盘存储空间的一般步骤&#xff1a; 登录百度网盘&#xff1a;首先&#xff0c;在您的计算机或移动设备上打开百度网盘&#xff0c;并使用您的百度账号登录。 选择扩容选项&#xff1a;一旦登…

数据结构题型12-链式队列

#include <iostream> //引入头文件 using namespace std;typedef int Elemtype;#define Maxsize 5 #define ERROR 0 #define OK 1typedef struct LinkNode {Elemtype data;struct LinkNode* next; }LinkNode;typedef struct {LinkNode* front;LinkNode* rear; }LinkQ…

java项目之小说阅读网站(ssm源码+文档)

项目简介 小说阅读网站实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、读者管理、作者管理、小说信息管理、小说分类管理、余额充值管理、购买小说管理、下载小说管理、系统管理。读者&#xff1a;个人中心、余额充值管理、购买小说管理、下载小说管理、我的…

黑豹程序员-架构师学习路线图-百科:Java

1、简介 Java是Sun公司推出的一门面向对象的编程语言&#xff0c;它是一种通过解释方式来执行的语言。 它出身名门&#xff0c;简化C而来&#xff0c;但并未照搬。继承了C语言各种优点&#xff0c;却摒弃了C里的多继承、指针等概念&#xff0c;因此Java语言具有功能强大和简单…

编码规范、git 规范

1、eslint配置&#xff0c;让代码变得更加规范&#xff0c;就是定义一些规则&#xff0c;开发人员要去遵守 该文件也是推荐在根目录下使用 2、prettier 就是格式化开发人员的代码 1、vscode 安装 prettier 插件 在项目根目录下创建一个 .prettierrc文件 然后去prettier 官网…

数据可视化项目管理软件推荐:提升团队效率的利器

项目管理是一个复杂的学科&#xff0c;实际工作中&#xff0c;即使项目计划做得再好&#xff0c;项目工作中也难免会出现一些意料之外的情况。 可视化程度低就是项目风险不易控、项目问题频发的一个原因。而数据可视化项目管理软件可以解决这些问题&#xff0c;帮助项目团队管控…

uniapp快速入门系列(1)- 概述与基础知识

章节三&#xff1a;抖音小程序页面开发 第1章&#xff1a;概述与基础知识1.1 uniapp简介1.1.1 什么是uniapp&#xff1f;1.1.2 为什么选择uniapp&#xff1f;1.1.3 uniapp与微信小程序的关系 1.2 HBuilderX介绍与安装1.2.1 什么是HBuilderX&#xff1f;1.2.2 HBuilderX的安装1.…

第1篇 目标检测概述 —(4)目标检测评价指标

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。目标检测评价指标是用来衡量目标检测算法性能的指标&#xff0c;可以分为两类&#xff0c;包括框级别评价指标和像素级别评价指标。本节课就给大家重点介绍下目标检测中的相关评价指标及其含义&#xff0c;希望大家学习之后…

如何把word的页眉页脚改为图片

前言 亲戚A&#xff1a; 听说你是计算机专业&#xff1f; 沐风晓月&#xff1a; 是啊 亲戚A&#xff1a; 那正好&#xff0c;来看看我这个页眉怎么改成图片 沐风晓月&#xff1a; 一万匹马奔腾而过 亲戚B&#xff1a; 听说你是英语专业&#xff1f; 沐风晓月&#xff1a; 是啊…