next up previous contents
下一主题: 内核 ipc_perm 结构体 向上: 内部和用户数据 前一主题: 内核 msg 结构体

内核msqid_ds结构体

每种类型的 IPC 对象都有一个由内核维护的内部数据结构。对于消息队列,这是msqid_ds结构体。内核为系统上创建的每个消息队列创建、存储和维护此结构体的一个实例。它在以下文件中定义:linux/msg.h如下所示


/* one msqid structure for each queue on the system */
struct msqid_ds {
    struct ipc_perm msg_perm;
    struct msg *msg_first;  /* first message on queue */
    struct msg *msg_last;   /* last message in queue */
    time_t msg_stime;       /* last msgsnd time */
    time_t msg_rtime;       /* last msgrcv time */
    time_t msg_ctime;       /* last change time */
    struct wait_queue *wwait;
    struct wait_queue *rwait;
    ushort msg_cbytes;    
    ushort msg_qnum;     
    ushort msg_qbytes;      /* max number of bytes on queue */
    ushort msg_lspid;       /* pid of last msgsnd */
    ushort msg_lrpid;       /* last receive pid */
};

虽然您很少需要关注此结构体的大部分成员,但为了完成我们的导览,对每个成员进行简要描述是必要的。

msg_perm

ipc_perm 的一个实例ipc_perm结构体,它在以下文件中为我们定义:linux/ipc.h。它保存消息队列的权限信息,包括访问权限以及关于队列创建者的信息(uid 等)。

msg_first

链接到队列中的第一个消息(列表的头部)。

msg_last

链接到队列中的最后一个消息(列表的尾部)。

msg_stime

时间戳 (time_t),表示最后一条发送到队列的消息的时间。

msg_rtime

时间戳,表示最后一条从队列中检索的消息的时间。

msg_ctime

时间戳,表示对队列进行的最后一次“更改”(稍后详细介绍)。

wwait

rwait

指向内核等待队列的指针。当消息队列上的操作认为进程应该进入睡眠状态时(即队列已满且进程正在等待空闲空间),它们会被使用。

msg_cbytes

队列上驻留的总字节数(所有消息大小的总和)。

msg_qnum

当前队列中的消息数量。

msg_qbytes

队列上的最大字节数。

msg_lspid

发送最后一条消息的进程的 PID。

msg_lrpid

检索最后一条消息的进程的 PID。


next up previous contents
下一主题: 内核 ipc_perm 结构体 向上: 内部和用户数据 前一主题: 内核 msg 结构体

转换于
1996 年 3 月 29 日星期五 14:43:04 EST