System V消息队列

Posix消息队列与System V消息队列的异同:
1)Posix消息队列与System V都不是使用真正的描述符,都不能使用select或epoll监听;
2)Posix消息队列读取消息总是返回最高优先级的最早消息,System V返回指定优先级的消息;
3)当往一个空消息队列放置一个消息时,Posix消息队列允许产生一个信号或启动一个线程
4)Posix消息队列相比System v缺失主要特性是从队列里取出指定优先级的消息的能力
消息队列与管道FIFO的区别:消息队列与管道和FIFO不同的是,后两者时字节流模型,没有消息边界,也没有与每个消息相关的消息类型

1.生成一个key
在这里插入图片描述
2.创建或访问一个消息队列
在这里插入图片描述
在这里插入图片描述

3.发送一个消息。
ptr指针为消息内容,是void*类型,该指针是一个结构指针,该结构有一个模版,但是模版的消息长度仅为1字节,所以我们可以自己定义一个消息结构体,需要注意的是,该结构体的第一个成员必须为long型的一个变量,用于表示该消息的优先级(也可以理解为消息类型,称为优先级是方便和Posix消息队列中的消息优先级作比较)。参数length为不包含long型优先级变量的消息长度,即该消息结构体的大小减去long型优先级变量的大小,剩余的大小称为消息大小,可以用sizeof(结构体)-sizeof(long)计算得出
在这里插入图片描述

在这里插入图片描述
4.取出一个消息。
ptr指向结构体,length定义同mgssnd一样,也可以是一个较大的值,因为这里的定义是能取出的最大数据量,返回值会返回实际读取出的数据量大小(不包含long型优先级变量大小),可以通过type获取指定类型的最早消息
在这里插入图片描述

在这里插入图片描述
5.控制函数
在这里插入图片描述

在这里插入图片描述