消息队列 分析及运用

消息队列

概念

消息队列特性为先进先出,底层实现是链表,在内核中创建,有一个消息队列的标识符来表示,这个队列当中的每一个元素都有自己的类型,每一个类型都有一个优先级概念

属性

消息队列在操作系统属性
msgmax:每一个节点最大消息的发送字节数为8 k
msgmnb:队列中所有消息的长度之和 为 16 k
msgmni:系统当中最大的队列数为 2 k

图解

在这里插入图片描述

使用

创建

    int msgget(key_t key, int msgflg)
        msgflg:IPC_CREAT
                      IPC_CREAT | IPC_EXCL
                      增加消息队列的使用权限,相当于文件的权限

发送

    int msgsnd(int msqid, const void* msgq, size_t size, int msgflg)
        msgflg:
            0:当队列满了,则会阻塞
            IPC_NOWAIT:如果队列满了,当前的发送操作不会进行阻塞,函数返回

接收

    int msgrcv(int msqid, void* msgq, size_t msgsz, long msgtype, int msgflg)
        msgtype:
            0:表示什么类型都可以接收 
            msgtype > 0:则返回队列中消息类型为 msgtype 的第一个消息
            msgtype < 0:返回队列中消息类型小于等于msgtype 绝对值的消息,如果这种消息越多,则返回类型最小的消息

销毁

    int msgctl(int msqid, int cmd, struct msqid_ds* buf)
        cmd:
            IPC_STAT
            IPC_SET
            IPC_RMID

特性

  1. 生命周期跟随内核,如果不使用命令删除,消息队列一直存在
  2. 消息队列可以进行双向通信(双工通信)
  3. 克服了管道的无格式的字节流的缺点
发布了47 篇原创文章 · 获赞 108 · 访问量 4723

猜你喜欢

转载自blog.csdn.net/qq_44759710/article/details/104369731