3.6消息队列

实现消息队列实现AB进程对话。

a.A进程发送一句话后,B进程接收到打印。然后B进程发送一句话,A进程接收后打印

b.重复上述步骤。直到AB接收或者发送完quit后,结束AB进程

A:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdlib.h>typedef struct
{long mtype;       //  消息类型  必须 > 0;char mtext[32];   //  消息内容  
}msgp;int main(int argc, const char *argv[])
{key_t key = ftok("/home/ubuntu/",1);if(key < 0){perror("ftok");return -1;}// 创建消息队列int msqid = msgget(key, IPC_CREAT|0664);if( msqid < 0){perror("msgget");return -1;}// 消息打包发送msgp msg;ssize_t res = 0;while(1){
//      **************    A 写	 *******************	printf("请输入消息类型:");scanf("%ld", &msg.mtype);getchar();if(msg.mtype <= 0){break;}printf("请输入消息内容:");fgets(msg.mtext, sizeof(msg.mtext), stdin);msg.mtext[strlen(msg.mtext) - 1] = '\0';if( msgsnd(msqid, &msg, sizeof(msg.mtext), IPC_NOWAIT) < 0 ){perror("msgsnd");return -1;}if( strcmp(msg.mtext,"quit") == 0 ){break;}printf("消息发送成功!!!\n");printf("消息队列如下:\n");system("ipcs -q");// **************    A  接收   ***************************printf("A等待接收.....\n");res = msgrcv(msqid, &msg, sizeof(msg.mtext), 0, 0);if( res < 0 ){perror("msgsnd");//          break;}if( strcmp(msg.mtext,"quit") == 0){break;}printf("A--消息接收成功!   ");printf("A--接受消息如下:\n");printf("res=%ld | mtype=%ld : mtext=%s \n",res, msg.mtype, msg.mtext);printf("------------------------------------------\n");}return 0;
}

B:

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdlib.h>#define MSG_EXCEPT      020000typedef struct
{long mtype;       //  消息类型  必须 > 0;char mtext[32];   //  消息内容  
}msgp;int main(int argc, const char *argv[])
{key_t key = ftok("/home/ubuntu/",1);if(key < 0){perror("ftok");return -1;}// 创建消息队列int msqid = msgget(key, IPC_CREAT|0664);if( msqid < 0){perror("msgget");return -1;}// 消息打包发送msgp msg;ssize_t res = 0;while(1){
//  ******************    B 接收  *******************printf("B等待接收.....\n");   res = msgrcv(msqid, &msg, sizeof(msg.mtext), 0, 0);if( res < 0 ){perror("msgsnd");}if( strcmp(msg.mtext,"quit") == 0){break;}printf("B--消息接收成功!   ");printf("B--接受消息如下:\n");printf("res=%ld | mtype=%ld : mtext=%s \n",res, msg.mtype, msg.mtext);printf("------------------------------------------\n"); //      **************    B 写   *******************    printf("请输入消息类型:");                                  scanf("%ld", &msg.mtype);getchar();if(msg.mtype <= 0){break;}printf("请输入消息内容:");fgets(msg.mtext, sizeof(msg.mtext), stdin);msg.mtext[strlen(msg.mtext) - 1] = '\0';if( msgsnd(msqid, &msg, sizeof(msg.mtext), IPC_NOWAIT) < 0 ){perror("msgsnd");return -1;}if( strcmp(msg.mtext,"quit") == 0 ){break;}printf("消息发送成功!!!\n");printf("消息队列如下:\n");system("ipcs -q");}
/*	// 删除消息队列if( msgctl(msqid, IPC_RMID, NULL) < 0 ){perror("msgctl");return -1;}printf("删除消息队列成功!!!\n");system("ipcs -q");
*/return 0;
}

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

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

相关文章

使用nvidia-ml-py事实监控GPU状态

平时监控GPU状态最常用的是watch配合nvidia-smi指令&#xff0c;但有时可能不仅仅需要监控&#xff0c;还需要记录状态数据&#xff0c;比如GPU的显存变化以及利用率变化等等。本文提供了一个使用nvidia-ml-py包编写的简易Demo&#xff0c;该Demo能够实现简易版的nvidia-smi功能…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中&#xff0c;你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码&#xff0c;用于获取Windows系统信息…

⁴ 细说IT从业者35岁,真的是职业的转折点吗

IT从业者如何跨过35岁职业门槛是一个很重要的问题。 一 虽然年龄可能会成为一些公司在招聘过程中的考虑因素&#xff0c;但是有一些方法可以帮助你克服这个挑战并继续在IT行业中发展。 首先&#xff0c;持续学习和自我提升非常重要。随着科技的不断发展&#xff0c;IT行业也在不…

STM32使用标准库编写外部时钟控制oled显示计数(proteus仿真)

这节课的结果是在上节课的基础上更改的&#xff1a;电路图为&#xff1a;用一个开关来模拟外部时钟的高低电平的变化。 当然也可以配置一个外部时钟来模拟&#xff0c;也是可以的&#xff1a; 由于这节课的代码是在上节课的基础上有一点修改而来的&#xff0c;所以就只把更改的…

【python高级编程教程】笔记(python教程、python进阶)第三节:(1)多态与鸭子类型(Polymorphism and Duck Typing)

参考文章1&#xff1a;【比刷剧还爽】清华大佬耗时128小时讲完的Python高级教程&#xff01;全套200集&#xff01;学不会退出IT界&#xff01; 参考文章2&#xff1a;清华教授大力打造的Python高级核心技术&#xff01;整整100集&#xff0c;强烈建议学习&#xff08;Python3…

Linux系统运维脚本:备份mysql数据库,并删除旧的数据库备份文件(保留最新的数据库备份)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…

什么是GA版本

软件发布版本的GA版本是什么意思&#xff1f; 一般可用性 (GA) 什么是一般可用性&#xff1f; 一般可用性&#xff08;GA&#xff09;是指向公众发布产品。与主要用于测试和用户反馈的限量发行版或测试版不同&#xff0c;当产品达到一般可用性时&#xff0c;就可以通过公司的一…

代码随想录训练营第50天| 123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 题目链接&#xff1a;123. 买卖股票的最佳时机 III - 力扣&#xff08;LeetCode&#xff09; class Solution {public int maxProfit(int[] prices) {int[][] dp new int[prices.length][5];if(prices.length 1) {return 0;}dp[0][0] 0;dp[0][1…

C++_程序流程结构_跳转语句_break

break 作用 用于跳出选择结构或循环结构 break使用的时机 出现在switch条件语句中&#xff0c;作用是终止case并跳出switch出现在循环语句中&#xff0c;作用是跳出当前的循环语句出现在嵌套循环中&#xff0c;跳出最近的内层循环语句 示例1 示例2 示例3

C语言结构体的大小,结构体内存对齐

1. 结构体的大小 在自己正真了解过之前&#xff0c;一直认为结构体的大小就是结构体内部成员大小的总和。 但当你去尝试打印结构体的大小时&#xff0c;会发现事实并非如此&#xff0c;也不会像你想的那样简单。 #include <stdio.h>struct S1 {char c1;char c2;int i;…

什么原因导致了电视大国的国内市场萎缩1300台?2024最值得购买的随身WiFi

近日&#xff0c;全国人大代表&#xff0c;TCL的创始人兼董事长就提出了一个问题&#xff1a;中国生产了世界上75%的电视机&#xff0c;但是国内市场的销量&#xff0c;在5年内缩水了1300万台&#xff0c;这究竟是为什么呢&#xff1f; 对此网友们纷纷解答&#xff1a; 电视能…

基于51单片机的智能火灾报警系统

基于51单片机的智能火灾报警系统 摘要&#xff1a; 本文提出了一种基于51单片机的智能火灾报警系统。该系统采用烟雾传感器和温度传感器来检测火灾的发生&#xff0c;并通过单片机进行数据处理和报警控制。此外&#xff0c;该系统还具有无线通信功能&#xff0c;可以实时将火灾…

Android开发者值得深入思考的几个问题,看完必懂

程序员的劫 最近&#xff0c;又被程序员年龄的事情刷屏了。37岁被公司优化&#xff0c;找工作几个月都没有很好的归属&#xff0c;所谓的小公司还看不上。等等类似的话题变成了程序员的吐槽固定标题&#xff0c;无论是程序员&#xff0c;还是其他行业人员&#xff0c;都可以就…

Stable Diffusion V3测评

1.引言 3月5号&#xff0c;Stability AI发布了介绍Stable Diffusion V3的研究论文&#xff0c;链接地址&#xff1a;戳我 这是目前他们发布的最先进、功能最强大的图像生成器&#xff0c;与一年多前发布的令人印象深刻的 Stable Diffusion V2.1 相比有了大幅升级。SD3所带来的…

LINUX重定向的原理

1.利用文件描述符规则实现重定向 文件描述的分配规则:最小没有使用的下标会分给最新打开的文件 正常printf打印是在stdin标准输出显示器打印&#xff0c;stdin标准输出显示器的fd是1。 所以只要把显示器文件stdin给关闭&#xff0c;再打开一个文件&#xff0c;这个文件的 fd…

HTML静态网页成品作业(HTML+CSS)——新年春节介绍网页设计制作(3个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示1、首页2、子页13、子页2 三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0…

【InternLM 笔记】使用InternStudio 体验书生·浦语2-chat-1.8b随记

书生浦语2-chat-1.8b 介绍 书生浦语-1.8B (InternLM2-1.8B) 是第二代浦语模型系列的18亿参数版本。为了方便用户使用和研究&#xff0c;书生浦语-1.8B (InternLM2-1.8B) 共有三个版本的开源模型&#xff0c;他们分别是&#xff1a; InternLM2-1.8B: 具有高质量和高适应灵活性…

[渗透教程]-025-Suricata多线程入侵检测系统

Suricata多线程入侵检测系统 官网 https://suricata-ids.org/项目地址 https://github.com/OISF/suricata简介 Suricata 是由 OISF(开发信息安全基金会)开发,它也是基于签名,但是集成了创新的技术。该引擎嵌入了一个 HTTP 规范化器和分析器(HTP 库),可提供非常先进的 …

双指针算法(2)

611.有效三角形的个数 一、题目描述 OJ题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09; 二、思路讲解 首先我们能想到的一定是暴力枚举&#xff0c;它的时间复杂度是(O^3)。 我们可以固定一个最长边&#xff0c;然后在比这条边小的有序数组中找出一个二元组&…

八、西瓜书——特征选择与稀疏学习

1.子集搜索与评价 对于1个学习任务来说,给定属性集,其中有些属性可能很关键、很有用&#xff0c;另一些属性则可能没什么用&#xff0c;我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelev…