当前位置: 首页 > web >正文

重生之IOday4————多进程通信

使用消息队列实现两个程序的相互通信

s.c如下

#include<my_head.h>struct msgbuf
{long mtype;   //消息类型char mtext[1024];  //消息正文
};//宏定义一个消息正文的大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))int main(int argc, const char *argv[])
{//创建一个key值key_t key = ftok("/",'k');if(key == -1){perror("ftok error\n");return -1;}//创建一个消息队列int msqid = msgget(key,IPC_CREAT|0664);if(msqid == -1){perror("msgget error");return -1;}printf("s.out:msqid=%d\n",msqid);//创建一个进程pid_t pid = fork();if(pid>0){//父进程struct msgbuf buf;while(1){printf("s.out父进程想要发送的消息类型:");scanf("%ld",&buf.mtype);getchar();printf("请输入想要发送的正文:");fgets(buf.mtext,SIZE,stdin);  //终端获取buf.mtext[strlen(buf.mtext)-1] = 0;if(strcmp(buf.mtext,"quit")==0){break;}msgsnd(msqid,&buf,SIZE,0);}}else if(pid == 0){//子进程struct msgbuf buf;while(1){//接收来自r.out子进程的消息msgrcv(msqid,&buf,SIZE,1,0);printf("取出的消息为:%s\n",buf.mtext);}}return 0;
}

r.c如下

#include<my_head.h>struct msgbuf
{long mtype;  char mtext[1024];
};#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{//创建一个key值key_t key = ftok("/",'k');if(key == -1){perror("ftok error\n");return -1;}//创建一个消息队列int msqid = msgget(key,IPC_CREAT|0664);if(msqid == -1){perror("msgget error");return -1;}printf("r.out:msqid=%d\n",msqid);//创建一个进程pid_t pid = fork();if(pid>0){struct msgbuf buf;while(1){//接收来自a.out父进程的消息msgrcv(msqid,&buf,SIZE,1,0);printf("取出的消息为:%s\n",buf.mtext);}}if(pid == 0){struct msgbuf buf;while(1){printf("请输入r,out子进程想要发送的消息类型:");scanf("%ld",&buf.mtype);getchar();printf("请输入想要发送的正文:");fgets(buf.mtext,SIZE,stdin);buf.mtext[strlen(buf.mtext)-1] = 0;if(strcmp(buf.mtext,"quit") == 0){break;}msgsnd(msqid,&buf,SIZE,0);}}	return 0;
}

运行结果如图

思维导图

http://www.xdnf.cn/news/19953.html

相关文章:

  • Python学习笔记--使用Django修改和删除数据
  • Python学习笔记--使用Django查询数据
  • 网络协议之https?
  • 智能开发新突破:大模型驱动的QAC与TESSY助手实战分享
  • 【工具变量】上市公司绿色供应链管理示范企业DID数据(2010-2024年)
  • phpstorm 操作git 另外的操作在 我的收藏
  • Maven动态控制版本号秘籍:高效发包部署,版本管理不再头疼!
  • Top 10 Kali Linux Tools for Hacking 2025.2
  • 《WINDOWS 环境下32位汇编语言程序设计》第11章 动态链接库和钩子
  • nano banana官方最强Prompt模板来了!六大场景模板详解
  • GEM5学习(4): 运行全系统模式的ARM系统
  • 如何构建企业级RAG知识库?实战方法、关键细节与平台选型
  • 只会刷App?大学生学透Android开发,直接开挂!
  • 【沉浸式解决问题】浮点数计算精度误差,round后值错误,0.1+0.2不等于0.3?
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • 机器视觉opencv总结
  • NuttX编译流程与config.h生成解析
  • 插入排序及希尔排序
  • AR智慧运维系统介绍
  • 【机器学习】实战:市场增长点分析挖掘项目
  • 算法模板(Java版)_链表(单链表、双链表)、栈和队列
  • HarmonyOS Stage 模型深度解析:构建现代化、高性能应用
  • IotDB批量数据脱敏DEMO
  • wpf 自定义控件,只能输入小数点,并且能控制小数点位数
  • 微服务多级缓存:从问题到实战(小白也能看懂的亿级流量方案)
  • FastJson
  • 技术框架之脚手架实现
  • .vsdx文件转pdf、word、ppt等文件在线分享(免费版)
  • Linux的墙上时钟和单调时钟的区别
  • Flutter环境搭建全攻略之-Macos环境搭建