消息队列
·消息队列提供了从一个进程向另一个进程发送一块数据的方法;
·每个数据块都被认为是有一个类型,接收者进程接收的数据块可以有不同的类型值;
·消息队列也具有管道的缺点,即每个消息的最大长度是有上限的,每个消息队列的总的字节数是有上限的,系统上消息队列的总数也有一个上限。
消息队列在内核中的表示
消息队列函数
1、创建和访问消息队列
函数原型:int msgget(key_t key,int msgflg);
参数:key:消息队列的名字;
msgflg: 创建时为:IPC_CREAT | 0644(权限)
打开时为:0
返回值:成功返回消息队列的标识码;失败返回-1.
创建一个消息队列msg.c的代码如下:
1 #include<stdio.h>
2 #include<stdlib.h>
3 #include<sys/ipc.h>
4 #include<sys/msg.h>
5
6 int main()
7 {
8 int id = msgget(1234,IPC_CREAT | 0644);
9 if(id == -1)
10 {
11 perror("msgget");
12 exit(1);
13 }
14 printf("creat ok!\n");
15 }
2、查看消息队列: ipcs -q
3、消息队列的控制函数
函数原型:int msgctl(int msgid,int cmd,struct msgid_ds *buf);
参数:msqid:由msgget函数返回的消息队列标识码;
cmd:将要采取的动作;
返回值:成功返回0,失败返回-1.
4、把一条消息添加到消息队列中
函数原型:int msgsnd(int msgid, const void *msgp, size_t msgsz, int msgflg);
参数: msgid:由msgget函数返回的消息队列标识码;
msgp:是一个指针,指向准备发送的消息;
msgsz:是msgp指向的消息长度,该长度不包含保存消息类型的long int长整型;
msgflag:一般设为0.
返回值:成功返回0;失败返回-