IO-DAY8

news2024/11/24 9:33:33

使用消息队列去实现2个终端之间的互相聊天
要求:千万不要做出来2个终端之间的消息发送是读一写的,一定要能够做到,一个终端发送n条消息,另一个终端一条消息都不回复
A终端:

#include<myhead.h>
typedef struct msgbuf
{
	long type;
	char text[256];
}msg_t;
void* snda(void* arg)
{
	int id=*(int*)arg;
	msg_t abuf;
	int alen=0;
	while(1)
	{
		memset(&abuf,0,sizeof(msg_t));
		abuf.type=1;
		printf("请输入消息:");
		scanf("%256s",abuf.text);
		while(getchar()!=10);
		alen=strlen(abuf.text);
		msgsnd(id,&abuf,alen,0);
	}
}
void* rcvb(void* arg)
{
	int id=*(int*)arg;
	msg_t bbuf;
	int blen=0;
	while(1)
	{
		memset(&bbuf,0,sizeof(msg_t));
		blen=msgrcv(id,&bbuf,256,2,0);
		printf("B:%s\n",bbuf.text);
	}

}
int main(int argc, char *argv[])
{
	key_t key=ftok("./talk",1);
	if(key==-1)
	{
		perror("ftok");
		return 1;
	}
	int id=msgget(key,IPC_CREAT|0666);
	pthread_t id2;
	pthread_t id3;
	pthread_create(&id2,NULL,snda,&id);
	pthread_create(&id3,NULL,rcvb,&id);
	pthread_join(id2,NULL);
	pthread_join(id3,NULL);


      return 0;
}

B终端:

#include<myhead.h>
typedef struct msgbuf
{
	long type;
	char text[256];
}msg_t;
void* sndb(void* arg)
{
	int id=*(int*)arg;
	msg_t bbuf;
	int blen=0;
	while(1)
	{
		memset(&bbuf,0,sizeof(msg_t));
		bbuf.type=2;
		printf("请输入消息:");
		scanf("%256s",bbuf.text);
		while(getchar()!=10);
		blen=strlen(bbuf.text);
		msgsnd(id,&bbuf,blen,0);
	}
}
void* rcva(void* arg)
{
	int id=*(int*)arg;
	msg_t abuf;
	int alen=0;
	while(1)
	{
		memset(&abuf,0,sizeof(msg_t));
		alen=msgrcv(id,&abuf,256,1,0);
		printf("A:%s\n",abuf.text);
	}

}
int main(int argc, char *argv[])
{
	key_t key=ftok("./talk",1);
	if(key==-1)
	{
		perror("ftok");
		return 1;
	}
	int id=msgget(key,IPC_CREAT|0666);
	pthread_t id2;
	pthread_t id3;
	pthread_create(&id2,NULL,sndb,&id);
	pthread_create(&id3,NULL,rcva,&id);
	pthread_join(id2,NULL);
	pthread_join(id3,NULL);


      return 0;
}

效果图:

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

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

相关文章

B02、执行引擎-5

1、前言 1.1、什么是机器码 各种用二进制编码方式表示的指令&#xff0c;叫做机器指令码。开始&#xff0c;人们就用它采编写程序&#xff0c;这就是机器语言。机器语言虽然能够被计算机理解和接受&#xff0c;但和人们的语言差别太大&#xff0c;不易被人们理解和记忆&#x…

基于SSM框架实现的在线心理评测与咨询系统(技术栈 spring+springmvc+mybatis+jsp+jquery+css)

一、项目简介 本项目是一套基于SSM框架实现的在线心理评测与咨询系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

小白学Java成长日记特别篇

晚上好&#xff0c;各位小伙伴。今天给大家带来的是Java的输出补充篇&#xff0c;前两篇说了输出和输入的大概&#xff0c;但我没有详细讲它俩&#xff0c;因此这篇文章来详细的聊一聊它俩。那么废话不多说&#xff0c;我们赶紧进入正题。 首先讲一讲这个Java的输出吧。 输出格…

使用MQTT.fx接入新版ONENet(24.4.8)

新版ONENet使用MQTT.fx 模拟接入 目录 新版ONENet使用MQTT.fx 模拟接入开始前的准备创建产品设备获取关键参数 计算签名使用MQTT.fx连接服务器数据流准备与上传数据流准备数据发送与接收 开始前的准备 创建产品 设备下载Token签名工具生成签名 创建产品设备 根据以下内容填写…

windows组播发不出去解决办法

由于开启了虚拟网卡&#xff0c;安装VMWare虚拟化软件&#xff0c;可能会通过虚拟网卡发送组播&#xff0c;需要禁用虚拟化网卡。

Linux网络名称空间的抽象设计以及借鉴意义

Linux作为一个强大的开源操作系统&#x1f427;&#xff0c;其网络虚拟化技术中的核心组件——网络名称空间&#xff08;Network Namespace&#xff09;&#xff0c;是对网络资源的一种高度抽象。网络名称空间允许系统内部存在多个隔离的网络环境&#xff0c;每个环境都有自己的…

数字图像处理与交叉学科中名词的拧巴

特征提取 图像处理——对图像、目标或特征点进行定量描述的方法及过程。 模式识别——对原特征进行特征变换&#xff0c;从高维空间到低维空间映射。 特征向量 模式识别、图像处理——一个观测包括多个变量&#xff0c;样本的多个特征组成特征向量。 线性代数——特征值对应的…

随机过程-BS定理

随机偏微分方程相比普通偏微分方程具有额外的随机项&#xff0c;反映了其描述的现象具有随机性质

请求转发和请求重定向的区别

请求转发(Forward)和请求重定向(Redirect)虽然都是 HTTP 服务器&#xff0c;处理客户端请求时进行(页面)跳转的实现方式&#xff0c;但是二者有以下 5 点不同: 1. 定义不同。 2. 跳转方不同。 3. 数据共享不同。 4.最终 URL 地址不同。 5.代码实现不同。 具体内容如下&…

第1章 MySQL概述

文章目录 第1章 MySQL概述1.1 前言1.2 MySQL安装1.3 常见的指令&#xff08;1&#xff09;MySQL的启动和关闭语句&#xff08;2&#xff09;MySQL的登录语句&#xff08;3&#xff09;MySQL的退出语句&#xff08;4&#xff09;查看MySQL的版本号&#xff08;5&#xff09;查看…

lgwr超时如何判断存储还是cpu问题?(等待事件各种类型和说明及相关查询)

通过awr报告看&#xff1a; 分析&#xff1a; log file parallel write平均等待8毫秒 log file sync平均等待402毫秒 排查&#xff1a; log file sync parallel write lgwr cpu log file parallel write等待少说明存储不慢。 所以&#xff1a;log file sync等待长是因为…

Redis系列之主从复制集群搭建

在上一篇博客&#xff0c;我们已经知道怎么搭建一个redis单机版&#xff0c;这篇博客基于之前的基础&#xff0c;来搭建一个redis主从同步&#xff0c;本博客框架是一主二从&#xff0c;一个主节点&#xff0c;其它两个从节点 实验环境 CentOS7Xshell6XFtp6Redis6.2.2 主从关…

强化学习MPC——(二)

本篇主要介绍马尔科夫决策&#xff08;MDP&#xff09;过程&#xff0c;在介绍MDP之前&#xff0c;还需要对MP&#xff0c;MRP过程进行分析。 什么是马尔科夫&#xff0c;说白了就是带遗忘性质&#xff0c;下一个状态S_t1仅与当前状态有关&#xff0c;而与之前的状态无关。 为…

金山系雄风再显,雷军创建黑灯工厂,中文编程也迎来新突破

金山系被誉为互联网行业的黄埔军校&#xff0c;这一称谓绝非虚言。 求伯君、雷军、蒋涛、傅盛、王峰等金山系的前辈们&#xff0c;不仅是中国科技发展的领军人物&#xff0c;更是以他们的智慧和勇气&#xff0c;引领着国产科技的新方向&#xff0c;书写了一段段充满激情与传奇色…

【matlab非线性规划工具箱安装2 GloptiPoly 3.10工具箱】

【matlab非线性规划工具箱安装2 GloptiPoly 3.10工具箱】 该博客是非线性手眼标定代码中所依赖的matlab工具箱的安装内容&#xff0c;除了进行手眼标定以外&#xff0c;该工具箱还可以用于其他的非线性规划问题 在安装该工具箱之前请先安装SeDuMi 手眼标定传送门&#xff1a…

2024马来西亚电商选品博览会

2024马来西亚电商选品博览会 展会概况 展会名称&#xff1a;2024马来西亚电商选品博览会 主办单位&#xff1a;广东进出口商会 时间:2024.11.29-12.1 地点&#xff1a;马来西亚国际贸易展览中心(MITEC) 展览面积&#xff1a;10000平方米 展会简介 2024马来西亚跨境电商选…

Feature Pyramid Networks for object detection

FPN 总述1.引言2.相关工作3. Feature Pyramid NetworksBottom-up pathwayTop-down pathway and lateral connections 4. 应用用于 RPN用于 Fast R-CNN 核心代码复现FPN网络结构ResNet Bottleneck完整代码 总述 下图中&#xff0c;蓝色边框表示的是特征图&#xff0c;边框越粗表…

HarmonyOS实战开发-如何使用 geolocation 实现获取当前位置经纬度

介绍 本示例使用 geolocation 实现获取当前位置的经纬度,然后通过 http 将经纬度作为请求参数,获取到该经纬度所在的城市。通过 AlphabetIndexer 容器组件实现按逻辑结构快速定位容器显示区域。 效果预览 使用说明 1.进入主页,点击国内热门城市,配送地址会更新为选择的城…

Redis系列之基于Linux单机安装

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库&#xff0c;并提供多种语言的 API。最近学习需要用到Redis&#xff0c;所以就去Linux服务器上部署一个&#xff0c;做下记录&#xff0c;方便…

美团一面4/9

面的时候自我感觉良好&#xff0c;复盘感觉答的一坨。。 0怎么比较两个对象 0Integer 不使用new会自动装箱&#xff0c;返回提前创建的。使用new就创建新对象。 1.Object类有什么方法 java中Object类中有哪些常用方法以及作用_java中object的方法有什么用-CSDN博客 2.hash…