消息队列
消息队列是一种以链表为结构组织的数据,存放在Linux内核中,是由各进程通过消息队列标识符来引用的一种数据传送方式。每个消息队列都有一个队列头,利用结构struct msg_queue来描述。队列头中包含了该消息队列的基本信息,包括消息队列键值、用户ID、组ID、消息数目等,甚至记录了最近对消息队列读写进程的PID。
消息队列的队列头存在于内核空间中,结构定义如下:
struct msg_queue
{
struct ipc_perm q_perm;
time_t q_stime; //上一条消息的发送时间
time_t q_rtime; //上一条消息的接收时间
time_t q_ctime; //上一次修改时间
unsigned long q_cbytes; //当前队列中的字节数据
unsigned long q_qnum; //队列中的消息数量
unsigned long q_qbytes; //队列的最大字节数
pid_t q_lspid; //上一条发送消息的PID
pid_t q_lrpid; //上一条接收消息的PID
struct list_head q_messages;
struct list_head q_receivers;
struct list_head q_senders;
};
结构msqid_ds用来设置或返回消息队列的信息,存在于用户空间中,结构定义如下: