首页 > 系统相关 >Linux系统中利用消息队列实现两个进程的通信

Linux系统中利用消息队列实现两个进程的通信

时间:2024-08-22 19:53:06浏览次数:11  
标签:info msgbuf struct 队列 Linux 通信 printf sizeof include

在Linux系统中进程间的通信有很多的方法,这次利用消息队列实现进程的通信

进程一的代码实现

#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <string.h>

struct msgbuf{
	long type;
	char info[50];
};
struct msgbuf m={1,0};//发送的1号信息存放
struct msgbuf n={2,0};//接收的2号信息存放

int main()
{
	while(1)
	{
		memset(m.info,0,sizeof(50));
		memset(n.info,0,sizeof(50));//重置消息内容
		printf("开始发送!!!!!!!!!!!!!\n");
		key_t key=ftok("./",1);//设置键值
		int msgid=msgget(key,IPC_CREAT|0666);//创建消息队列
		printf("请输入你要发送的内容\n");
		scanf("%s",m.info);
		msgsnd(msgid,&m,sizeof(m)-sizeof(long),0);//向消息队列中写入数据
		printf("发送成功!\n");
		if(!strcmp(m.info,"quit"))//设置退出函数
		{
			printf("程序退出\n");
			return 0;
		}
		
		printf("开始接收!!!!!!!!!!!!!\n");
		msgrcv(msgid,&n,sizeof(n)-sizeof(long),n.type,0);
		if(!strcmp(n.info,"quit"))
		{
			printf("程序退出\n");
			return 0;
		}
		printf("收到:%s\n",n.info);
	}
	
	return 0;
}




进程二的代码实现

#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <string.h>

struct msgbuf{
	long type;
	char info[50];
};
struct msgbuf m={1,0};
struct msgbuf n={2,0};

int main()
{
	while(1)
	{
		memset(m.info,0,sizeof(50));
		memset(n.info,0,sizeof(50));
		printf("开始接收!!!!!!!!!!!!!\n");
		key_t key=ftok("./",1);
		int msgid=msgget(key,IPC_CREAT|0666);
		msgrcv(msgid,&m,sizeof(m)-sizeof(long),m.type,0);
		if(!strcmp(m.info,"quit"))
		{
			printf("程序退出\n");
			return 0;
		}
		printf("收到:%s\n",m.info);
		
		printf("开始发送!!!!!!!!!!!!!\n");
		printf("请输入你要发送的内容\n");
		scanf("%s",n.info);
		msgsnd(msgid,&n,sizeof(n)-sizeof(long),0);
		printf("发送成功!\n");
		if(!strcmp(n.info,"quit"))
		{
			printf("程序退出\n");
			return 0;
		}
	}
	
	return 0;
}




实现效果图如下

标签:info,msgbuf,struct,队列,Linux,通信,printf,sizeof,include
From: https://blog.csdn.net/m0_69863374/article/details/141436710

相关文章

  • Linux基础优化与常用软件包说明
    1.安装常用工具1.1CentOS(7)1.1.1是否联网pingqq.com1.1.2配置yum源(安装软件的软件仓库)默认情况下yum下载软件的时候是从随机地址下载。配置yum从国内下载(仅执行即可),修改yum配置指定统一下载地址(阿里云).修改yum下载软件的地址,改为阿里云#配置yum源##备份yum......
  • linux防火墙ufw以及iptables
    1,直到服务器被攻击了,才知道防火墙的重要性问题不大,被攻击了也就是cpu被别人跑满,账号密码被换掉而已。。。所以防火墙还是比较重要的,尤其是公网ip的防火墙2,ufw这个是ubuntu入门级别的防火墙了,使用方法比较简单,ubuntu系统自带,常用指令:sudoapt-getinstallufw#安装ufwsu......
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice 国产版提取word文档指定位置内容保存为
    PageOffice国产版:支持信创系统,支持银河麒麟V10和统信UOS,支持X86(intel、兆芯、海光等)、ARM(飞腾、鲲鹏、麒麟等)、龙芯longarch芯片架构。本示例关键代码的编写位置,请参考“开始-快速上手”里您所使用的开发语言框架的最简集成代码注意本文中展示的代码均为关键代码,复制粘......
  • build linux kernel
    https://www.kernel.org/doc/html/latest/translations/zh_CN/admin-guide/README.htmlhttps://www.kernel.org/https://docs.kernel.org/6.8/安装内核源代码如果您要安装完整的源代码,请把内核tar档案包放在您有权限的目录中(例如您的主目录)并将其解包:xz......
  • Linux常用命令
    首先登陆linux系统,输入账号xxxx回车,再输入密码:xxxxLinux常用命令如下:[root@localhost~]# cd ..  --- 返回上一级目录[root@localhost/]#ls     ---查看目录信息(有很多目录)[root@localhost/]#cd-  --返回上次所在的目录  [root@localhost/]#cdhom......
  • 使用scp将linux服务器中的文件传到windows本地主机上
    开启windows的ssh服务。参考这篇:https://www.cnblogs.com/windheart/p/18373914使用scp命令传文件scp<linx服务器要穿的文件夹或文件路径><windows用户名>@<windowsipv4地址>:<windows保存文件或文件夹的路径>示例:传文件:将当前目录中的cogvideo_2.py传到windows的C......
  • Linux top 命令详解
            top命令是Linux和Unix系统中一个非常强大的实时系统监控工具,它可以显示系统中各个进程的实时动态管理视图,类似于Windows的任务管理器。在需要诊断系统性能问题或监控资源使用情况时是非常有用的。使用top命令        在命令行中输入top并回车,即可启......
  • Linux timedatectl 命令
            timedatectl 是Linux系统中用于查询和更改系统日期、时间和时区的工具,它特别适用于那些使用systemd作为系统和服务管理器的系统。语法格式为“timedatectl[参数]”。        发现电脑时间跟实际时间不符?如果只差几分钟的话,我们可以直接调整。但......
  • 【Linux】挂载硬盘并设置开机自动挂载
    @目录1.什么是挂载2.文件管理器点击挂载3.手动挂载查看可挂载的硬盘扇区在想要的位置创建一个目录作为挂载点4.设置开机自动挂载本文介绍了在Linux系统下挂载硬盘的概念和步骤,并讲解了开机自动挂载的方法。1.什么是挂载秉承着Linux“一切皆文件”的理念,硬盘这种东西在系统中以......
  • CentOS 7.4 Linux 下文件名乱码快速解决方案
    原文链接: https://blog.csdn.net/qingyujin/article/details/119026866文件是在WIndows下创建的,Windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。文件名转码工具convmv没安装......