Posix消息队列注意事项
随内核的持续性
读总是返回最高优先级的最早消息。
当往一个空队列放置一个消息时,允许产生一个信号或启动一个线程。
可认为是一个消息链表
队列中每个消息具有
1.一个无符号整数优先级
2.消息的数据部分长度(可以为0)
3.数据本身(如果长度)

链表头中为当前队列的两个属性:队列中允许的最大消息数(mq_mqxmsg)以及每个消息的最大大小(mq_msgsize)。只能在创建队列的时候设置。
MQ_OPEN_MAX一个进程能够同时拥有打开着消息队列的最大数目
MQ_PRIO_MAX任意消息的最大优先级+1
每个消息队列有一个保持其当前打开着描述符数的引用计数器,因而本函数能够实现类似于unlink函数删除一个文件的机制:当一个消息队列的引用计数仍大于0时,其name就能删除。但是该队列的析构(这与从系统中删除其名字不同)要到最后一个mq_close发生时才进行。
一个消息队列的名字在系统中的存在本身也占用其引用计数器的一个引用数。mq_unlink从系统中删除该名字意味着同时将其引用计数减1,若变为0则真正拆除该队列。跟mq_unlink一样,mq_close也将当前消息队列的引用计数减1,若变为0则附带拆除该队列。
限制:
无法向接收者准确地标识每条消息的发送者,
POSIX消息队列允许异步事件通知,以告知何时有一个消息放置到了某个空消息队列中。 有两种方式: 产生一个信号
创建一个线程来执行一个指定的函数
异步通知挺多坑的,建议看书。
异步信号安全函数:可以从信号处理程序中调用的函数。不是异步信号安全函数不可以从信号处理程序中调用。
(这个人很懒,连昵称也没有: 兄弟不要误导别人,多看看手册吧。 On Linux, a message queue descriptor is actually a file descriptor. (POSIX does not require such an implementation.) This means that a message queue descriptor can be monitored using select(2), poll(2), or epoll(7). This is not portable.)
书是10年前的书,手册是现在的手册
消息队列描述符不是“普通”描述符,它不能用在select或poll中,但我们可以巧妙的用一个管道和一个子进程实现。通过异步事件通知,把消息写入管道里。通过读取管道知晓消息队列的情况。

书上有使用内存映射I/O以及posix互斥锁和条件变量实现posix消息队列。
Posix消息队列注意事项的更多相关文章
- Linux IPC POSIX 消息队列
模型: #include<mqueue.h> #include <sys/stat.h> #include <fcntl.h> mq_open() //创建/获取消 ...
- Posix消息队列
转载于:http://blog.csdn.net/zx714311728/article/details/53197196 1.消息队列 消息队列可以认为是一个消息链表,消息队列是随内核持续的.队列中 ...
- 第5章 Posix 消息队列
5.1 概述 消息队列可以认为是一个链表.有写权限的线程可往消息队列中放置消息,有读权限的线程可以从消息队列中取走消息. 消息队列和管道/FIFO的区别: (1)消息队列往一个队列中写消息前,并不需要 ...
- posix 消息队列
注意 在涉及到posix消息的函数时, gcc 编译时要加-lrt参数, 如 gcc -lrt unpipc.c mqpack.c send.c -o send gcc -lrt unpipc.c m ...
- Posix消息队列实现机制
本文是对<Unix 网络编程 卷2:进程通信>的笔记. 引言 消息队列是进程间通信的一种方式,可是如果不理解他的实现原理,会有众多不理解之处,下面就结合本书中的例子,对posix消息队列来 ...
- POSIX 消息队列相关问题
一.查看和删除消息队列要想看到创建的posix消息队列,需要在root用户下执行以下操作:# mkdir /dev/mqueue# mount -t mqueue none /dev/mqueue删除 ...
- Linux IPC实践(7) --Posix消息队列
1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...
- 进程间通信--POSIX消息队列
相关函数: mqd_t mq_open(const char *name, int oflag); mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, si ...
- POSIX 消息队列 之 概述 链接方式
NAMEmq_overview —— POSIX消息队列概述 DESCRIPTIONPOSIX消息队列允许进程以消息的形式交换数据.此API与System V消息队列(msgget(2),msgsnd ...
随机推荐
- Spring配置项<context:annotation-config/>解释说明
转自:https://blog.csdn.net/techbirds_bao/article/details/9241371 在基于主机方式配置Spring的配置文件中,你可能会见到<conte ...
- Windows Git 服务器 客户端 Delphi Git配置
装Git后本地单机版就有了版本管理功能. git 使用记录 git 客户端 这2个工具足够用. git for windows,http://git-scm.com/download/,Git-1.9 ...
- ul li的添加 删除 复制 clone()
语法总结 li=document.createElement('li') li.innerText = tag $('#i1').append(li) $(..).clone() 复制整个文本和Ht ...
- nginx tcp负载均衡配置
1. nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译需添加--with-stream配置参数 2. 在 nginx.conf 文件中, 与 ...
- What I'm Researching
[What I'm Researching] 1.C++11 2.NLP 3.android dev 4.warm up 5.PageRank
- leetcode 14 最长公共前缀
描述: 给个字符串vector,求最长公共前缀. 解决: 直接取第一个字符串作为最长公共前缀,将其每个字符遍历过一次.设最长字符实际为k,共n个元素,则复杂度O(nk) string longestC ...
- Django基础学习三_路由系统
今天主要来学习一下Django的路由系统,视频中只学了一些皮毛,但是也做下总结,主要分为静态路由.动态路由.二级路由 一.先来看下静态路由 1.需要在project中的urls文件中做配置,然后将匹配 ...
- MongoDB 自动分片 auto sharding
MongoDB部署实验系列文章 MongoDB做为NoSQL数据库,最近几年持续升温,越来越多的企业都开始尝试用MongoDB代替原有Database做一些事情.MongoDB也在集群,分片,复制上也 ...
- Write File
Write to File with C++ #include <iostream.h> #include <fstream.h> int main() { const cha ...
- MVC数据注解
数据注解 using System.ComponentModel.DataAnnotations; KeyAttribute 唯一主键StringLengthAttribute 字符串长度约束MaxL ...