Msgsnd 消息发送|学习笔记

简介: 快速学习 Msgsnd 消息发送

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

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


Msgsnd 消息发送

 

内容介绍:

一、发送消息

二、代码实现

 

向消息队列中添加消息

 

一、 发送消息

1.格式

#include <sys/msg.h>

int. msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg);

2.功能:

将新消息添加到消息队列。

3.参数:

msqid:消息队列的标识符。

msgp:待发送消息结构体的地址。

msgsz:消息正文的字节数。

msgflg:函数的控制属性

0: msgsnd_调用阻塞直到条件满足为止。

IPC_NOWAIT:若消息没有立即发送则调用该函数的进程会立即返回。

4.返回值:

成功:0  失败:-1

 

二、代码实现

#include <stdio.h>

#include<unsitd.h>

#include<sys/types.h>

#include<sys/ipc.h>

#include <sys / msg. h>

#include<string.h>

typedef struct msg {//添加信息之前要定义一个结构体

long type ;       //类型名,第一个必须是长整型

char text [200];

char name [20];

}MSG;               //新结构体的类型名为 MSG

int main(int argc, char *agrv[ ])

{

key_t key; //定义一个变量 key 值

MSG m;   //定义一个结构体变量 m

int masg_id;

int ret;     //定义一个整型变量 ret

key = ftok(“.”, 1); //当前目录加一得到 key 值

if(key == -1)

{

perror(“ftok”);

return 0;

}

printf(“key= %d\n” ,key);

msg_id = msgget(key ,IPC_CREAT|0666);

printf(“msg_id = %d\n” ,msg_id);

m.type = 1;     //给结构体赋值,消息类型为 1

strcpy(m.text ,”hello world”);  //给正文内容赋值

strcpy(m.name ,”lucy”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

//向 msg_id 队列中传参数

if(ret != 0)     //如果 ret 不等于0,失败,程序结束

{

perror(“msgsnd”);

return 0;
}      //注意: m 不在列表中,m 是一个暂时的容器

m.type = 2;    // 添加第二条信息

strcpy(m.text, “hello kitty”);

strcpy(m.name ,”lilei”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

if(ret != 0)

{

perror(“msgsnd”);

return 0;
}

m.type = 3;    //添加第三条信息

strcpy(m.text, “hello china”);

strcpy(m.name ,”tom”);

ret = masgsnd(msg_id ,&m,sizeof(m)-4,0);

if(ret != 0)

{

perror(“msgsnd”);

return 0;
}

return 0;

}

相关文章
|
消息中间件 存储 监控
自顶向下学习 RocketMQ(十):消息重投和消息重试
生产者在发送消息时,同步消息失败会重投,异步消息有重试,oneway 没有任何保证。消息重投保证消息尽可能发送成功、不丢失,但可能会造成消息重复,消息重复在 RocketMQ 中是无法避免的问题。消息重复在一般情况下不会发生,当出现消息量大、网络抖动,消息重复就会是大概率事件。另外,生产者主动重发、consumer 负载变化也会导致重复消息。
自顶向下学习 RocketMQ(十):消息重投和消息重试
|
7月前
|
消息中间件 存储 canal
3分钟白话RocketMQ系列—— 如何发送消息
3分钟白话RocketMQ系列—— 如何发送消息
155 0
|
6天前
|
消息中间件
【面试问题】MQ 消息怎么路由?
【1月更文挑战第27天】【面试问题】MQ 消息怎么路由?
|
6天前
|
消息中间件 存储 RocketMQ
RocketMQ-初体验RocketMQ(09)-广播消息、延时消息、批量消息
RocketMQ-初体验RocketMQ(09)-广播消息、延时消息、批量消息
44 0
|
消息中间件 存储 前端开发
同步异步调用,并谈谈消息队列mq;RocketMQ发送消息和消费消息测试类
同步调用优点: 时效性强,打电话、直播,很快可以得到结果 同步调用的问题:
502 1
|
消息中间件 缓存 RocketMQ
消息发送5-总结|学习笔记
快速学习消息发送5-总结
44 0
消息发送5-总结|学习笔记
|
消息中间件 存储 运维
【视频】普通消息 | 学习笔记
快速学习【视频】普通消息
448 0
【视频】普通消息 | 学习笔记
|
消息中间件 RocketMQ 开发者
消息发送4发送消息|学习笔记
快速学习消息发送4发送消息
74 0
消息发送4发送消息|学习笔记
|
消息中间件 缓存 负载均衡
消息发送3-选择队列|学习笔记
快速学习消息发送3-选择队列
87 0
消息发送3-选择队列|学习笔记
|
存储 消息中间件 固态存储
RocketMQ 消息存储和发送性能保证|学习笔记
快速学习 RocketMQ 消息存储和发送性能保证
97 0
RocketMQ 消息存储和发送性能保证|学习笔记