QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 694|回复: 3

为了实现自己的消息队列小小观摩了一下内核代码

[复制链接]
发表于 2003-7-3 14:22:23 | 显示全部楼层 |阅读模式
不过那个结构msg_queue是干什么用的?
和msqid_ds类似但是不全阿
发表于 2003-7-3 20:59:45 | 显示全部楼层
message queue header?
回复

使用道具 举报

 楼主| 发表于 2003-7-4 09:51:54 | 显示全部楼层
struct msqid_ds {
        struct ipc_perm msg_perm;
        struct msg *msg_first;                /* first message on queue,unused  */
        struct msg *msg_last;                /* last message in queue,unused */
        __kernel_time_t msg_stime;        /* last msgsnd time */
        __kernel_time_t msg_rtime;        /* last msgrcv time */
        __kernel_time_t msg_ctime;        /* last change time */
        unsigned long  msg_lcbytes;        /* Reuse junk fields for 32 bit */
        unsigned long  msg_lqbytes;        /* ditto */
        unsigned short msg_cbytes;        /* current number of bytes on queue */
        unsigned short msg_qnum;        /* number of messages in queue */
        unsigned short msg_qbytes;        /* max number of bytes on queue */
        __kernel_ipc_pid_t msg_lspid;        /* pid of last msgsnd */
        __kernel_ipc_pid_t msg_lrpid;        /* last receive pid */
};
这个是在msg.h里的结构,看上去比较合乎我本来的构思(比如有起始指针结束指针)
但是它的注释是:/* Obsolete, used only for backwards compatibility and libc5 compiles */

新的结构是
struct msg_queue {
        struct kern_ipc_perm q_perm;
        time_t q_stime;                        /* last msgsnd time */
        time_t q_rtime;                        /* last msgrcv time */
        time_t q_ctime;                        /* last change time */
        unsigned long q_cbytes;                /* current number of bytes on queue */
        unsigned long q_qnum;                /* number of messages in queue */
        unsigned long q_qbytes;                /* max number of bytes on queue */
        pid_t q_lspid;                        /* pid of last msgsnd */
        pid_t q_lrpid;                        /* last receive pid */

        struct list_head q_messages;
        struct list_head q_receivers;
        struct list_head q_senders;
};
在msg.c中 看来具体的队列被分开了阿

呵呵 我还是按照旧的结构做比较适合
回复

使用道具 举报

发表于 2003-7-4 11:31:43 | 显示全部楼层
yes, divided to three lists, so shoudl be faster for large link
and the start pointer and end pointer can be easily getten from list_head
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 13:48 , Processed in 0.038828 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表