开发者学堂课程【物联网开发- 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 t
ype ;
//类型名,第一个必须是长整型
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;
}