9.30消息队列

news2024/11/28 3:31:29

发送方:

#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(-1==msgsnd(msgid,&msg,SIZE,0)){
			perror("msgsnd error");
			return -1;
		}

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

	}

	//4.获取消息队列的状态
	struct msqid_ds msgds;
	//调用状态
	msgctl(msgid,IPC_STAT,&msgds);   //将消息队列的状态放入msgds变量中

	printf("mode = %#o\n",msgds.msg_perm.mode);
	printf("size = %ld\n",msgds.msg_cbytes);
	printf("qnum = %ld\n",msgds.msg_qnum);
	printf("lspid = %#x\n",msgds.msg_lspid);

	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(-1==msgrcv(msgid,&msg,SIZE,0 ,0)){
			perror("msgrcv error");
			return -1;
		}

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

		printf("rcv:%s\n",msg.data);

	}

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

	return 0;
}

效果:

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

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

相关文章

国庆9.30

消息队列实现进程间通信 snd #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…

中国1km分辨率逐月降水数据集(1901-2020)

佳节 中国逐月降水量数据集&#xff08;1901-2021&#xff09;是根据CRU发布的全球0.5气候数据集以及WorldClim发布的全球高分辨率气候数据集&#xff0c;通过Delta空间降尺度方案在中国地区降尺度生成的。使用了496个独立气象观测点数据进行验证&#xff0c;验证结果可信。数…

模块化CSS

1、什么是模块化CSS 模块化CSS是一种将CSS样式表的规则和样式定义封装到模块或组件级别的方法&#xff0c;以便于更好地管理、维护和组织样式代码。这种方法通过将样式与特定的HTML元素或组件相关联&#xff0c;提供了一种更具可维护性、可复用性和隔离性的方式来处理样式。简单…

在MyBatisPlus中添加分页插件

开发过程中&#xff0c;数据量大的时候&#xff0c;查询效率会有所下降&#xff0c;这时&#xff0c;我们往往会使用分页。 具体操作入下&#xff1a; 1、添加分页插件&#xff1a; package com.zhang.config;import com.baomidou.mybatisplus.extension.plugins.Pagination…

整理mongodb文档:副本集二

个人博客 整理mongodb文档:副本集二 个人博客&#xff0c;求推荐&#xff0c;本片内容较为乱 文章概叙 本文章主要讲在MongoDB的副本集中的一些注意点&#xff0c;主要是如何对seconadry进行数据操作&#xff0c;以及对更新数据的一些介绍 查看当前节点 上一集讲了关于搭…

【JavaEE】CSS

CSS 文章目录 CSS语法引入方式内部样式表行内样式表外部样式 选择器基础选择器标签选择器类选择器id选择器通配符选择器 复合选择器后代选择器伪类选择器链接伪类选择器 字体设置设置文本颜色粗细样式文本对齐 背景背景颜色背景平铺背景尺寸 圆角矩形元素显示模式块级元素 盒模…

【Linux】进程控制基础知识

目录 一&#xff0c;fack回顾 二&#xff0c;进程终止 1.进程终止&#xff0c;操作系统做了什么&#xff1f; 2.进程终止&#xff0c;常见的方式 1.main函数的&#xff0c;return 返回码 2. exit()函数 三&#xff0c;进程等待 1. 回收进程方法 &#xff08;1. wait…

cola 架构简单记录

cola 是来自张建飞&#xff08;Frank&#xff09;的偏实现的技术架构&#xff0c;里面的业务身份和扩展点也被MEAF引用&#xff0c;cola本身由java 实现、但其实可以是一种企业通用的技术架构。 业务身份来源 https://blog.csdn.net/significantfrank/article/details/8578556…

Jasypt 实现自定义加解密

如下文章已经讲解了&#xff0c; Jasypt 是什么&#xff0c;怎么集成 Jasypt&#xff0c;怎么使用 Jasypt。 Jasypt 开源加密库使用教程_jasyptstringencryptor-CSDN博客Jasypt 加密框架概述1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持&#xff0c;…

Linux开发工具之文本编译器vim

●IDE例子 Linux编辑器-vim使用 vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0c;可视化操作不仅可以在终端运行&#xff…

Windows电脑显示部分功能被组织控制

目录 问题描述 解决方法 总结 问题描述 如果你的电脑出现以上情况&#xff0c;建议你使用我这种方法&#xff08;万不得已&#xff09; 解决方法 原因就是因为当时你的电脑在激活的时候是选择了组织性激活的&#xff0c;所以才会不管怎么搞&#xff0c;都无法摆脱组织的控…

发布以太坊测试网络中的第一笔交易

1.安装以太坊钱包 要想发送发布以太坊测试网络中的第一笔交易&#xff0c;首先需要创建一个管理账户的钱包&#xff0c;这个钱包可以理解为管理私钥的容器&#xff0c;具体按照步骤为&#xff1a;打开Chrome浏览器应用商店搜索MetaMask&#xff0c;选择对应的钱包添加至Chrome…

提升API文档编写效率,Dash for Mac是你的不二之选

在编写和开发API文档的过程中&#xff0c;你是否经常遇到查找困难、管理混乱、效率低下等问题&#xff1f;这些都是让人头疼的问题&#xff0c;但现在有了Dash for Mac&#xff0c;一切都将变得简单而高效。 Dash for Mac是一款专为API文档编写和管理设计的工具&#xff0c;它…

SpringBoot 中使用JPA

最近忙里偷闲&#xff0c;想写一点关于JPA的东西&#xff0c;另外也加深下对JPA的理解&#xff0c;才有了此篇博文。 一、JPA JPA &#xff08;Java Persistence API&#xff09;Java持久化API&#xff0c;是一套Sun公司Java官方制定的ORM 规范&#xff08;sun公司并没有实现…

【Java】对象内存图多个对象同一内存地址

目录 学生类 单个对象内存图 多个对象指向同一个内存地址 学生类 Student.java如下&#xff1a; package com.面向对象;public class Student {String name;int age;public void work() {System.out.println("开始敲代码...");} }StudentDemo.java如下&#xff…

MAC地址震荡,STP震荡,OSPF路由协议震荡

目录 一.MAC地址震荡 原因 二层环路 三层环路 避免三层环路的方法 1.最小化路由汇总 2.null0路由 二.STP震荡 原因 三.路由协议震荡 OSPF路由协议震荡 BGP路由震荡 一.MAC地址震荡 原因 MAC地址表震荡也称为MAC地址漂移&#xff0c;是由网络环路造成的&#xff1…

【数据结构篇】堆

文章目录 堆前言基本介绍认识堆堆的特点堆的分类堆的操作堆的常见应用 堆的实现JDK 自带的堆手动实现堆 堆 前言 本文主要是对堆的一个简单介绍&#xff0c;如果你是刚学数据结构的话&#xff0c;十分推荐看这篇文章&#xff0c;通过本文你将对堆这个数据结构有一个大致的了解…

No164.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

怒刷LeetCode的第20天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯算法 方法二&#xff1a;permute方法 方法三&#xff1a;交换法 第二题 题目来源 题目内容 解决方法 方法一&#xff1a;回溯算法 方法二&#xff1a;递归和交换 方法三&#xff1a;二维列表 第三…

NLP 04(GRU)

一、GRU GRU (Gated Recurrent Unit)也称门控循环单元结构,它也是传统RNN的变体,同LSTM一样能够有效捕捉长序列之间的语义关联&#xff0c; 缓解梯度消失或爆炸现象&#xff0c;同时它的结构和计算要比LSTM更简单,它的核心结构可以分为两个部分去解析: 更新门、重置门 GRU的内…