消息队列是内核地址空间中的内部链表,通过linux内核在各个进程之间传递内容。消息顺序地发送到消息队列中,并且以几种不同的方式从队列中获取,每个消息队列可以用IPC标识符号唯一的进行识别。内核中的消息队列是通过IPC的标志符来区别的,不同的消息队列之间是相对独立的。每个消息队列中的消息,又构成独立的链表。
1)消息缓冲区的结构
常用的结构msgbuf结构。(我们也可以通过这个结构定义自己的msg结构)
#include<linux/msg.h>
struct msgbuf
{
long mtype; //消息类型,可以自行设置
char mtext[1]; //消息数据,并不一定要设置为char或者长度为1,可以根据情况自己设定
};
当然,我们也可以从新定义一个消息结构:
struct msgmbuf
{
long mtype;
char mtext[10];
long length;
};
2)结构msgid_ds
内核msgid_ds结构——IPC对象分为3类,每个类型都有一个内部数据结构,该数据结构是由内核维护的。
具体结构