IOday8作业

 

使用消息队列完成两个进程之间相互通信(多进程)

#include<myhead.h>


//定义结构体
struct buf
{
	long mtype;
	char mtest[1024];
};

#define SIZE (sizeof(struct buf)-sizeof(long))

//进程
int main(int argc, const char *argv[])
{
	//创建key
	key_t key1 = ftok("/",'k');
	if(key1 == -1)
	{
		perror("ftok");
		return -1;
	}
	
	//创建消息队列
	int msgid1 = msgget(key1,IPC_CREAT|0664);
	if(msgid1 == -1)
	{
		perror("msgid1");
		return -1;
	}
		//定义结构体
	struct buf mbuf;

	//创建子进程
	pid_t pid = fork();
	if(pid == 0)
	{
		//子进程1发送
		while(1)
		{
			printf("请输入类型:");
			scanf("%ld",&mbuf.mtype);
			printf("请输入内容:");
			scanf("%s",mbuf.mtest);
			msgsnd(msgid1,&mbuf,SIZE,0);
			if(strcmp(mbuf.mtest,"quit") == 0)
			{
				break;
			}
		}
		exit(EXIT_SUCCESS);
	}
	else if(pid > 0)
	{
		//父进程2接受
		while(1)
		{
			msgrcv(msgid1,&mbuf,SIZE,20,0);
			printf("传输的数据为%s\n",mbuf.mtest);
			if(strcmp(mbuf.mtest,"quit") == 0)
			{
				break;
			}
		}
		waitpid(pid,NULL,0);
	}
	else
	{
		perror("fork");
		return -1;
	}


			return 0;
}
#include<myhead.h>


//定义结构体
struct buf
{
	long mtype;
	char mtest[1024];
};

#define SIZE (sizeof(struct buf)-sizeof(long))

//进程
int main(int argc, const char *argv[])
{
	//创建key
	key_t key1 = ftok("/",'k');
	if(key1 == -1)
	{
		perror("ftok");
		return -1;
	}
	
	//创建消息队列
	int msgid1 = msgget(key1,IPC_CREAT|0664);
	if(msgid1 == -1)
	{
		perror("msgid1");
		return -1;
	}
	
	//定义结构体
	struct buf mbuf;

	//创建子进程
	pid_t pid = fork();
	if(pid == 0)
	{
		//子进程1接受
		while(1)
		{
			msgrcv(msgid1,&mbuf,SIZE,10,0);
			printf("传输的数据为%s\n",mbuf.mtest);
			if(strcmp(mbuf.mtest,"quit") == 0)
			{
				break;
			}
		}
		exit(EXIT_SUCCESS);

	}
	else if(pid > 0)
	{
		//父进程2发送

		while(1)
		{
			printf("请输入类型:");
			scanf("%ld",&mbuf.mtype);
			printf("请输入内容:");
			scanf("%s",mbuf.mtest);
			msgsnd(msgid1,&mbuf,SIZE,0);
			if(strcmp(mbuf.mtest,"quit") == 0)
			{
				break;
			}
		}
		waitpid(pid,NULL,0);
	}
	else
	{
		perror("fork");
		return -1;
	}


	//删除消息队列
	
	if(msgctl(msgid1,IPC_RMID,NULL)== -1)
	{
		perror("msgtrl");
		return -1;
	}

	return 0;
}

效果图:

 使用消息队列完成两个进程之间相互通信(多线程)

#include<myhead.h>

//定义结构体
struct buf
{
	long mtype;
	char mtest[1024];
};

#define SIZE (sizeof(struct buf)-sizeof(long))



//发送
void* func1(void* arg)
{
	int msgid1 = *((int*)arg);
	//定义结构体
	struct buf mbuf;
	while(1)
	{
		printf("请输入类型:");
		scanf("%ld",&mbuf.mtype);
		printf("请输入内容:");
		scanf("%s",mbuf.mtest);
		msgsnd(msgid1,&mbuf,SIZE,0);
		if(strcmp(mbuf.mtest,"quit") == 0)
		{
			pthread_exit(NULL);
		}
	}

}


//接受
void* func2(void* arg)
{
	int msgid2 = *((int*)arg);
	//定义结构体
	struct buf mbuf;
	while(1)
	{
		msgrcv(msgid2,&mbuf,SIZE,40,0);
		printf("传输的数据为%s\n",mbuf.mtest);
		if(strcmp(mbuf.mtest,"quit") == 0)
		{
			pthread_exit(NULL);
		}
	}

}



int main(int argc, const char *argv[])
{
	//创建key
	key_t key1 = ftok("/",'k');
	if(key1 == -1)
	{
		perror("ftok");
		return -1;
	}
	
	//创建消息队列
	int msgid1 = msgget(key1,IPC_CREAT|0664);
	if(msgid1 == -1)
	{
		perror("msgid1");
		return -1;
	}
	

	//创建两个线程
	pthread_t tid1;
	pthread_t tid2;
	if(pthread_create(&tid1,NULL,func1,&msgid1) != 0)//msgid1 
	{
		perror("pthread_create");
		return -1;
	}
	if(pthread_create(&tid2,NULL,func2,&msgid1) != 0)
	{
		perror("pthread_create");
		return -1;
	}
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);

	

	
	return 0;
}
#include<myhead.h>

//定义结构体
struct buf
{
	long mtype;
	char mtest[1024];
};

#define SIZE (sizeof(struct buf)-sizeof(long))



//发送
void* func1(void* arg)
{
	int msgid2 = *((int*)arg);
	//定义结构体
	struct buf mbuf;
	while(1)
	{
		printf("请输入类型:");
		scanf("%ld",&mbuf.mtype);
		printf("请输入内容:");
		scanf("%s",mbuf.mtest);
		msgsnd(msgid2,&mbuf,SIZE,0);
		if(strcmp(mbuf.mtest,"quit") == 0)
		{
			pthread_exit(NULL);
		}
	}

}


//接受
void* func2(void* arg)
{
	int msgid1 = *((int*)arg);
	//定义结构体
	struct buf mbuf;
	while(1)
	{
		msgrcv(msgid1,&mbuf,SIZE,30,0);
		printf("传输的数据为%s\n",mbuf.mtest);
		if(strcmp(mbuf.mtest,"quit") == 0)
		{
			pthread_exit(NULL);
		}
	}

}



int main(int argc, const char *argv[])
{
	//创建key
	key_t key1 = ftok("/",'k');
	if(key1 == -1)
	{
		perror("ftok");
		return -1;
	}
	
	//创建消息队列
	int msgid1 = msgget(key1,IPC_CREAT|0664);
	if(msgid1 == -1)
	{
		perror("msgid1");
		return -1;
	}
	

	//创建两个线程
	pthread_t tid1;
	pthread_t tid2;
	if(pthread_create(&tid1,NULL,func1,&msgid1) != 0)//msgid1 
	{
		perror("pthread_create");
		return -1;
	}
	if(pthread_create(&tid2,NULL,func2,&msgid1) != 0)
	{
		perror("pthread_create");
		return -1;
	}
	pthread_join(tid1,NULL);
	pthread_join(tid2,NULL);

	if(msgctl(msgid1,IPC_RMID,NULL) == -1)
	{
		perror("msgctl");
		return -1;
	}

	
	return 0;
}

效果图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

系统韧性研究(7)| 韧性系统的16大指导原则

不良事件和条件可能会中断系统&#xff0c;导致系统无法提供必要的功能和服务。正如我在本系列的前几篇文章中所概述的那样&#xff0c;韧性是大多数系统的一个基本质量属性&#xff0c;因为它们提供了关键的能力和服务&#xff0c;尽管存在着不可避免的困难&#xff0c;但这些…

前沿重器[39] | 对话式推荐系统——概念和技术点

前沿重器 栏目主要给大家分享各种大厂、顶会的论文和分享&#xff0c;从中抽取关键精华的部分和大家分享&#xff0c;和大家一起把握前沿技术。具体介绍&#xff1a;仓颉专项&#xff1a;飞机大炮我都会&#xff0c;利器心法我还有。&#xff08;算起来&#xff0c;专项启动已经…

Java设计模式-单例(Singleton)设计模式的概述及实现

目录 &#x1f436;1 设计模式概述 &#x1f436;2 何为单例模式 &#x1f436;3 实现思路 &#x1f436;4 饿汉式实现代码 &#x1f436;5 懒汉式实现代码 &#x1f436;6 对比两种模式&#xff08;特点、优缺点&#xff09; &#x1f436;7 单例模式的优点及应用场景 &…

Python中的魔力编程:掌握面向对象之道

Python中的面向对象编程 背景&#xff1a; ​ 最近在看一些代码的时候&#xff0c;对类中的一些内置方法不是很懂&#xff0c;因此出一篇文章来细说一下&#xff0c;希望大家看完后对Python中类有一个清楚的认识。 基础铺垫&#xff1a; ​ 面向对象的三个特点&#xff1a;…

【设计模式--结构型--享元模式】

设计模式--结构型--享元模式 享元模式定义结构实现案例优缺点使用场景 享元模式 定义 运用共享技术来有效的支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅减少需要创建的对象数量&#xff0c;避免大量相似的对象的开销&#xff0c;从而提高系统资源的利用率。 …

创建并测试第一个django项目并解决过程中遇到的问题

Django 是一个高级 Python Web 框架&#xff0c;它鼓励快速开发和简洁、实用的设计。它由经验丰富的开发人员构建&#xff0c;解决了 Web 开发的大部分麻烦&#xff0c;因此您可以专注于编写应用程序&#xff0c;而无需重新发明轮子。它是免费和开源的。 目录 一、django项目 …

官宣!「湾区之光群星演唱会」拉开2024新年音乐华丽序幕!

万众期待&#xff0c;群星荟萃&#xff01;青春宝安时尚湾区——湾区之光群星演唱会即将在2024年1月5日闪耀亮相深圳宝安。 华语歌坛巨星天后齐聚一堂&#xff0c;携手多位实力唱将&#xff0c;共同呈现一场无与伦比的演唱会盛宴&#xff01;在深情而又充满力量的歌声之中&…

孩子还是有一颗网安梦——Bandit通关教程:Level 0 → Level 1

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

LabVIEW开发矿井排水监控系统

LabVIEW开发矿井排水监控系统 针对矿井水害对煤矿安全生产构成的威胁&#xff0c;设计了一种基于嵌入式PLC和LabVIEW的矿井排水监控系统。该系统结合了PLC的可靠控制与单片机的应用灵活性&#xff0c;有效克服了传统排水方法中的不足&#xff0c;如测量不准确、效率低下等问题…

Java:字符流 文件输出 与 读入 方法

Java&#xff1a;字节流 文件输出与读入方法 并 实现文件拷贝 文章目录 字符流FileReaderFileWrite 字符流 字符流底层就是字节流。 字符流 字节流 字符集 特点&#xff1a; 输入流&#xff1a;一次读入一个字节&#xff0c;遇到中文时&#xff0c;一次读多个字节。 输出流…

图-数据结构

图的介绍 如果你有学过《离散数学》&#xff0c;那么对图的概念一定不陌生&#xff0c;在计算机科学中&#xff0c;一个图就是一些顶点的集合&#xff0c;这些顶点通过一系列边连接&#xff08;结对&#xff09;。顶点用圆圈表示&#xff0c;边就是这些圆圈之间的连线。注意&a…

Design patterns--代理模式

设计模式之代理模式 我们使用Qt开发大型应用程序时&#xff0c;经常遇见大型程序启动时需要加载一些配置信息、用户末次操作信息&#xff0c;以及算法模型等数据时比较费时&#xff0c;笔者在程序启动时设计欢迎页或加载页等窗体来提示用户程序正在加载某些数据&#xff0c;加载…

【Java数据结构 -- 顺序表】

List和ArrayList与顺序表 一. List1.1 List介绍2.1 常见接口介绍3.1 List的使用 二. ArrayList与顺序表1.线性表2.顺序表2.1 接口的实现2.2 顺序表的创建2.3 顺序表的打印2.4 顺序表的插入2.5 顺序表的按索引位置插入数据2.6 判断顺序表是否包含某个数2.7 返回顺序表某个数的索…

谁会成为第一个MoE大模型基座呢?重磅!Mixtral MoE 8x7B!!!

文章目录 谁会成为第一个MoE大模型基座呢&#xff1f;重磅&#xff01;Mixtral MoE 8x7B&#xff01;&#xff01;&#xff01;前言重磅&#xff01;Mixtral MoE 8x7B&#xff01;&#xff01;&#xff01;Mixtral是啥模型介绍模型结构长啥样&#xff1f;表现如何&#xff1f;可…

Python从入门到精通五:Python数据容器

数据容器入门 为什么学习数据容器 思考一个问题&#xff1a;如果我想要在程序中&#xff0c;记录5名学生的信息&#xff0c;如姓名。 如何做呢&#xff1f; 学习数据容器&#xff0c;就是为了批量存储或批量使用多份数据 Python中的数据容器&#xff1a; 一种可以容纳多份…

HCIA-H12-811题目解析(10)

1、【单选题】DHCP客户端在租期到达哪个比例时第一次发送续租报文&#xff1f; 2、【单选题】在WLAN中用于标识无线网络&#xff0c; 区分不同的无线网络的是&#xff1f; 3、【单选题】我们在笔记本电脑上搜索可接入无线网络时&#xff0c;显示出来的网络名称实际是 4、【单…

哪些原因导致MES管理系统实施项目失败

在制造业中&#xff0c;实施MES管理系统是一种提高生产效率、降低成本、提升质量的重要手段。然而&#xff0c;许多MES管理系统实施项目并未取得预期的成功&#xff0c;甚至失败。本文将探讨导致MES管理系统实施项目失败的原因。 1、需求不明确 在MES实施项目中&#xff0c;需…

Java-异常(一)-异常的概述和常见异常的举例

&#x1f436;b站视频 124-异常处理-异常的概述与常见异常的举例_哔哩哔哩_bilibili 目录 b站视频 5.1 异常概念 5.2 Error 示例代码 5.3 Exception异常划分 ❓面试题&#xff1a;常见的异常有哪些&#xff1f;举例说明 &#x1f436;5.1 异常概念 在使用计算机语言进行…

基于SSM的校园心理健康网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

PostGIS学习教程十二:地理

PostGIS学习教程十二&#xff1a;地理 坐标为"地理&#xff08;geographics&#xff09;“形式或者说是” 纬度&#xff08;latitude&#xff09;/经度&#xff08;longitude&#xff09;"形式的数据非常常见。 与Mercator&#xff08;墨卡托&#xff09;、UTM&…