• 消息队列
    • msqid_ds
    • key值与ID值

    消息队列

    消息的链式队列。
    重要的数据结构

    msqid_ds

    1. //位置/usr/include/linux/msg.h
    2. struct msqid_ds {
    3. struct ipc_perm msg_perm;
    4. struct msg *msg_first; /* 指向消息头 */
    5. struct msg *msg_last; /* 指向消息尾 */
    6. __kernel_time_t msg_stime; /* 最近msgsnd(发送消息)时间 */
    7. __kernel_time_t msg_rtime; /* 最近msgrcv(接收消息)时间 */
    8. __kernel_time_t msg_ctime; /* 最近修改时间 */
    9. unsigned long msg_lcbytes; /* Reuse junk fields for 32 bit */
    10. unsigned long msg_lqbytes; /* ditto */
    11. unsigned short msg_cbytes; /* 当前队列的字节数 */
    12. unsigned short msg_qnum; /* 当前队列中消息个数 */
    13. unsigned short msg_qbytes; /* 队列最大字节数 */
    14. __kernel_ipc_pid_t msg_lspid; /* 最近msgsnd的pid */
    15. __kernel_ipc_pid_t msg_lrpid; /* 最近receive的pid */
    16. };

    key值与ID值

    每一个IPC机制都有一个ID,只有ID值相同才能传递数据。它的类型是key_t(int),但是设置任意数字为key值有违软件设计的思想。所以Linux提供了函数ftok来创建key值,以文件为参数,提高了与文件的关联度。