消息队列聊天答案讲解|学习笔记

简介: 快速学习消息队列聊天答案讲解

开发者学堂课程【物联网开发- Linux 高级程序设计全套视频消息队列聊天答案讲解】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/660/detail/11050


消息队列聊天答案讲解

 

消息队列聊天程序

#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/ipc.h>

#include <string.h>

#include <sys/types.h>

//定义三个发送人

#ifdef L

#define M  ‘L’

char writer[ ]=” Lucy”

//Lucy 接收消息时消息的类型必须为 L 的 assic 码

#endif

#ifdef B

#define M  ‘B’

char writer[ ]=” Bob”  

//Bob 接收消息时消息的类型必须为 B 的 assic 码

#ifdef P

#define M  ‘P’

char writer[ ]=”Peter”  

//Peter 接收消息时消息的类型必须为 P 的 assic 码

#endif

typedef struct msg_my  //消息结构体

{  

long mtype ;       //用来存储消息的类型

char name [20];   //用来存发送者的名字

char mtext [100];  //用来存储真正要发送的消息的内容

}MSG;        

int main (int argc, char **argv)

{

char buff [ 120] =””;

int msgid;

MSG msg;

//key_t key;

//key =ftok (“.”.0xFF); //通过 ftok 获取 key 值

if((msgid =msgget((key_t)12345,IPC_CREAT|0666))<0)  //创建消息队列

//人为指定生成 key 值

{

perror(“msgid”);

exit(1);

}

if(fork()==0)

{
//检测键盘,组织数据,发送消息到消息队列

while(1)

{

printf(“\r %s:”, writer);  //打印发送人提示

fflush(stdout);

fgets(buff,sizeof(buff),stdin);  //从键盘获取输入

buff[strlen(buff)-1]=’\0’;  //将 \n 变成 \0

if(buff[0]==’L’||buff[0]==’P’||buff[0]==’B’)

{

msg.mtype=(long)buff[0];  

//消息类型(这里进行了强制类型转换)

strcpy(msg.name,writer);

strcpy(msg.mtext,buff+2);

msgsnd(msgid,&msg,sizeof(msg)-sizeof(long),0);  //添加消息

}

}

}

else

{

//从消息列表中,安装“我“消息类型接收消息

while(1)

{

//只接受自己名字首字母大写类型的消息

msgrcv(msgid,&msg,sizeof(msg)-sizeof(long),(long int)(M),0);

//每次循环从 msgid 队列中接收消息存入 msg 结构体中,(M)表//示只接收该类型的消息,0表示如果没有该类型消息即堵塞,反之,
//进行下一步,打印消息

printf(“\rmessage from %s:%s\n”,msg.name,msg.mtext)

printf(“\r%s:”, writer);

fflush(stdout);//人为刷新缓冲区

}

}

}

在 make 中注意,根据定义不同的宏,编译不同可定义程序。

相关文章
|
7月前
|
消息中间件 存储 中间件
【SpringCloud Stream消息驱动、设计思想以及整合rabbitmq消息队列案例--学习笔记】
【SpringCloud Stream消息驱动、设计思想以及整合rabbitmq消息队列案例--学习笔记】
290 0
|
消息中间件 监控 Java
手把手系列:消息队列 MNS 实操讲|学习笔记
快速学习手把手系列:消息队列 MNS 实操讲
700 0
手把手系列:消息队列 MNS 实操讲|学习笔记
|
消息中间件 运维 RocketMQ
消息队列 MNS 简史|学习笔记
快速学习消息队列 MNS 简史
409 0
消息队列 MNS 简史|学习笔记
|
消息中间件 移动开发 大数据
阿里云消息队列产品选型| 学习笔记
快速学习阿里云消息队列产品选型
593 0
阿里云消息队列产品选型| 学习笔记
|
消息中间件 存储 弹性计算
消息队列 kafka 销售指南| 学习笔记
快速学习消息队列 kafka 销售指南
消息队列 kafka 销售指南| 学习笔记
|
消息中间件 运维 物联网
微消息队列 MQTT 销售指南| 学习笔记
快速学习微消息队列 MQTT 销售指南
微消息队列 MQTT 销售指南| 学习笔记
|
消息中间件 存储 RocketMQ
消息队列和索引文件恢复|学习笔记
快速学习消息队列和索引文件恢复
消息队列和索引文件恢复|学习笔记
|
消息中间件 物联网 Shell
消息队列的创建及打开|学习笔记
快速学习消息队列的创建及打开
消息队列的创建及打开|学习笔记
|
消息中间件 缓存 NoSQL
数据类型-list 实现日志消息队列 | 学习笔记
快速学习数据类型-list 实现日志消息队列
数据类型-list 实现日志消息队列 | 学习笔记
|
消息中间件 NoSQL 关系型数据库
redis 实现消息队列及常用命令(三)|学习笔记
快速学习 redis 实现消息队列及常用命令(三)
410 0
redis 实现消息队列及常用命令(三)|学习笔记

热门文章

最新文章

下一篇
DataWorks