随内核的持续性

读总是返回最高优先级的最早消息。

当往一个空队列放置一个消息时,允许产生一个信号或启动一个线程。

可认为是一个消息链表

队列中每个消息具有

  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消息队列注意事项的更多相关文章

  1. Linux IPC POSIX 消息队列

    模型: #include<mqueue.h> #include <sys/stat.h> #include <fcntl.h> mq_open() //创建/获取消 ...

  2. Posix消息队列

    转载于:http://blog.csdn.net/zx714311728/article/details/53197196 1.消息队列 消息队列可以认为是一个消息链表,消息队列是随内核持续的.队列中 ...

  3. 第5章 Posix 消息队列

    5.1 概述 消息队列可以认为是一个链表.有写权限的线程可往消息队列中放置消息,有读权限的线程可以从消息队列中取走消息. 消息队列和管道/FIFO的区别: (1)消息队列往一个队列中写消息前,并不需要 ...

  4. posix 消息队列

    注意 在涉及到posix消息的函数时, gcc 编译时要加-lrt参数, 如 gcc -lrt unpipc.c mqpack.c send.c -o send gcc -lrt unpipc.c m ...

  5. Posix消息队列实现机制

    本文是对<Unix 网络编程 卷2:进程通信>的笔记. 引言 消息队列是进程间通信的一种方式,可是如果不理解他的实现原理,会有众多不理解之处,下面就结合本书中的例子,对posix消息队列来 ...

  6. POSIX 消息队列相关问题

    一.查看和删除消息队列要想看到创建的posix消息队列,需要在root用户下执行以下操作:# mkdir /dev/mqueue# mount -t mqueue none /dev/mqueue删除 ...

  7. Linux IPC实践(7) --Posix消息队列

    1. 创建/获取一个消息队列 #include <fcntl.h> /* For O_* constants */ #include <sys/stat.h> /* For m ...

  8. 进程间通信--POSIX消息队列

    相关函数: mqd_t mq_open(const char *name, int oflag); mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, si ...

  9. POSIX 消息队列 之 概述 链接方式

    NAMEmq_overview —— POSIX消息队列概述 DESCRIPTIONPOSIX消息队列允许进程以消息的形式交换数据.此API与System V消息队列(msgget(2),msgsnd ...

随机推荐

  1. 文本操作 $(..).text() $(..).html() $(..).val()最后一种主要用于input

    文本操作: $(..).text() # 获取文本内容 $(..).text('<a>1</a>') # 设置文本内容 $(..).html() $(..).html('< ...

  2. 【317】python 指定浏览器打开网页 / 文件

    一.python 打开浏览器的方法: 1. startfile方法(打开指定浏览器) import os os.startfile("C:\Program Files\internet ex ...

  3. Oracle的服务端_默认_启动的服务

  4. Django基础学习五_引入静态文件

    今天继续学习Django,今天主要掌握两个小点 一.如果为Django项目中引入静态文件 1.先要在project目录下创建static的目录,然后将jquery文件拷贝这个目录下就可以了 2.在pr ...

  5. 784. Letter Case Permutation 字符串中字母的大小写组合

    [抄题]: Given a string S, we can transform every letter individually to be lowercase or uppercase to c ...

  6. Red Hat 系列如何快速定制二进制内核 RPM 包?

    随着Linux服务器越来越多了,底层系统内核想要保持版本统一就需要定制专门的二进制安装包来便捷的升级和管理. RedHat系那当然就是使用rpmbuild来做定制化管理了. 今天我们分俩个部分(roo ...

  7. Halcon选择一堆region中面积第N大的region的算法实现

    以下图为例: 比如我想把面积第2小的那个“小正方形”选择出来,算法代码如下: read_image (Yuan, 'C:/Users/happy xia/Desktop/yuan.png') bina ...

  8. setitemdata 32位 or 64位

    我用SetItemData 和GetItemData把数据库一条数据导入到CListctrl 32位下 程序都可以跑 GetItemData能得到自定义类数据 可以64位得不到?

  9. php快速获取所有的自定义常量用户常量

    快速获取自定义的常量.用户常量 echo "<pre>"; print_r(get_defined_constants(true)['user']); echo &qu ...

  10. SFTP 安装与配置

    SFTP 安装与配置 sftp 是 Secure File Transfer Protocol 的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH 的一部分,由于这种 ...