开发者学堂课程【物联网开发- Linux 高级程序设计全套视频:消息队列的创建及打开】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/660/detail/11045
消息队列的创建及打开
内容介绍:
一、如何创建或打开消息队列
二、代码演示
一、如何创建或打开消息队列
#include<sys/msg.h>
Int msgget(key_t key, int msgflg);
1、功能
创建一个新的或打开一个已经存在的消息队列。如果消息队列不存在则创造一个新的,存在则通过key值打开,不同的进程调用此函数,只要用相同的key值就能得到同一个消息队列的标识符。(返回值是消息队列号。
2、参数
Key:IPC键值。
msgflg:标识函数的行为及消息队列的权限。
msgflg的取值:
IPC_CREAT:创建消息队列
IPC_EXCL:检测消息队列是否存在(与open_EXCL是一样的)
位或权限位:消息队列位或权限位后可以设置消息队列的访问权限,格式和open函数的mode_t一样,但可执行权限未使用。
3、返回值
成功:消息队列的标识符,失败:返回值-1
4、使用shell命令操作消息队列
查看消息队列
Ipcs -q
删除消息队列
Ipcrm -q msqid
二、代码演示
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>\\头文件
Int main(int argc, char *argv[ ])
{
key_t key;\\定义一个变量名字为key
int msg_id;\\定义一个存放消息队列的变量
key = ftok(“.”,1);\\创一个路径
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);\\打印一个消息队列号
return 0;
}
得到结果:
vi msgget.c
gcc msgget.c-o magget
/msgget\\创建
key =16845002
msg_id =0
\\在运行一次程序,得到的进程是一样的
./msgget
key =16845003
msg_id =0
\\查看消息队列的方式:
ipcs -q
\\删除消息队列的方法:
ipcrm -q