linux消息队列

消息队列是内核地址空间中的内部链表,每个消息队列都在系统范围内对应唯一的键值,所以,要获得一个消息队列的描述字,只需提供该消息队列的键值即可。

1)消息缓冲区结构:

   存放消息数据的模板,可在基本定义的基础上自己定义

        在include/linux/msg.h中声明,描述如下:

/* msgsnd 和msgrcv 系统调用使用的消息缓冲区*/

struct msgbuf {

    long mtype;         /* 消息的类型,必须为正数 */

    char mtext[1];      /* 消息正文 */

};

可以定义自己的例如

struct msgbuf {

    long mtype;         /* 消息的类型,必须为正数 */

    char mtext[10];      /* 消息正文 ,长度可定义,但有最长限制 最长8192*/

   log longth; /*可加上自己需要的字段s*/

};

 

2)内核结构msgid_ds,对于系统创建的每个消息队列内核均为其创建、存储和维护一个该结构的实例。

struct msqid_ds {

    struct ipc_perm msg_perm;

    struct msg *msg_first;    /* 队列上第一条消息,即链表头*/

    struct msg *msg_last;    /* 队列中的最后一条消息,即链表尾 */

    time_t msg_stime;        /* 发送给队列的最后一条消息的时间 */

    time_t msg_rtime;            /* 从消息队列接收到的最后一条消息的时间 */

    time_t msg_ctime;             /* 最后修改队列的时间*/

    ushort msg_cbytes;          /*队列上所有消息总的字节数 */

    ushort msg_qnum;          /*在当前队列上消息的个数 */

    ushort msg_qbytes;        /* 队列最大的字节数 */

    ushort msg_lspid;           /* 发送最后一条消息的进程的pid */

    ushort msg_lrpid;           /* 接收最后一条消息的进程的pid */

};

 3)ipc_perm结构

内核把ipc对象的许可权限信息放在一个ipc_perm中

4)

内核把每一条消息存储在以msg结构为框架的队列中,它在include/ linux/msg.h中定义如下:

struct msg {

    struct msg *msg_next;   /* 队列上的下一条消息 */

    long msg_type;          /*消息类型*/

    char *msg_spot;         /* 消息正文的地址 */

    short msg_ts;           /* 消息正文的大小 */

};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值