NAME

mq_receive - 从消息队列中获取消息 (REALTIME)

SYNOPSIS

#include <mqueue.h>

ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);

DESCRIPTION

函数 mq_receive() 会mqdes 指定的消息队列中取出最高优先级中排队时间最久的消息.

如果参数 msg_len 比消息队列的属性mq_msgsize 小, 函数会执行失败.

函数执行成功后,选定的消息会拷贝到参数msg_ptr 指定的内存中并且从消息队列中删除.

如果参数 msg_len 比 {SSIZE_MAX}大, 结果是由具体实现决定的.

如果参数 msg_prio 不是NULL, 消息的优先级会存储到 msg_prio 指向的内存中.

如果指定的消息队列是空的并且O_NONBLOCK没有被设置, 函数 mq_receive() 会阻塞到有消息排队或者函数 mq_receive() 被信号中断.

如果指定的消息队列是空的,有多个线程在等待从这个消息队列中接受消息,并且系统支持优先级调度,那么优先级最高等待时间最长的线程会接受消息.否则,哪一个线程接受消息是未指定的.

如果指定的消息队列是空的并且O_NONBLOCK被设置了, 函数会返回失败.

PARAMETERS

mqdes

【OUT】消息队列的描述符

msg_ptr

【IN】指向消息结构体的指针

msg_len

【OUT】消息的字节数, 不能小于 mq_msgsize

msg_prio

【IN】指向要保存消息优先级的内存

RETURN VALUE

如果函数执行成功, 函数返回0

如果函数执行失败,函数返回 -1 并且设置errno,errno的种别详见下面的ERRORS一节.

ERRORS

[EAGAIN]

O_NONBLOCK标志被设置并且消息队列是空的.

[EBADF]

参数 mqdes 不是有效的消息队列描述符.

[EINTR]

函数被信号中断.

[EINVAL]

函数已阻塞并且参数 abs_timeout 无效(无效是因为 tv_sec 小于0或者 tv_nsec 小于0或者 tv_nsec 大于 10亿(1000 million).

[EMSGSIZE]

参数 msg_len 指定的大小 小于消息队列的消息大小属性.

[EBADMSG]

检测到消息数据损坏.

EXAMPLES

mq_receive的更多相关文章

  1. 浅谈Linux中的信号处理机制(三)

    一晃眼,已经到9月底了,都来不及去感慨时间匆匆.最近常常会想明年的今天我将会在那里干着什么样的工作?对未来又是憧憬又是担忧,压力山大.无论如何现在还是踏踏实实的学习吧,能这样安安静静学习的日子也不多了 ...

  2. 002:IPC与system函数简介

    1:IPC名字mq_XXX,sem_XXX,shm_XXX. 消息队列 信号量 共享内存区 <mqueue.h> <semaphore.h> <sys.mman.h> ...

  3. Linux IPC POSIX 消息队列

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

  4. IPC-----POSIX消息队列

    消息队列可以认为是一个链表.进程(线程)可以往里写消息,也可以从里面取出消息.一个进程可以往某个消息队列里写消息,然后终止,另一个进程随时可以从消息队列里取走这些消息.这里也说明了,消息队列具有随内核 ...

  5. Posix消息队列

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

  6. IPC 机制简介

    IPC 机制简介 概述 在Unix早期发展中,做出重大贡献的两大主力Bell实验室和伯克利大学(BSD)在IPC(InterProcess Communication)方面的侧重点有所不同.前者对Un ...

  7. linux消息队列的使用及内核实现原理

    mq_receive NAME mq_open - open a message queue SYNOPSIS #include <fcntl.h> /* For O_* constant ...

  8. 第5章 Posix 消息队列

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

  9. mq_notify

    NAME mq_notify - 通知进程可以接收一条消息 (REALTIME) SYNOPSIS #include <mqueue.h> int mq_notify(mqd_t mqde ...

随机推荐

  1. iOS 后台调用apns推送

    1.java调用apns推送 2.php 调用apns 推送,可借助终端

  2. ObjectARX® for Beginners: An Introduction

    转:ObjectARX® for Beginners: An Introduction Lee Ambrosius – Autodesk, Inc.         CP4164-L    Objec ...

  3. Go语言的通道(1)-无缓冲通道

    前言: 上文中我们采用了[原子函数]已经[共享锁]两种方式分别对多个goroutine进行了同步,但是在go语言中提供了另一种更好的方式,那就是使用通道(Channel). 一.通道是什么? 其实无论 ...

  4. 第六十三天 js基础

    一.JS三个组成部分 ES:ECMAScript语法 DOM:document对象模型=>通过js代码与页面文档(出现在body中的所有可视化标签)进行交互 BOM:borwser对象模型=&g ...

  5. kafka 发送确认参数acks的几种模式

    1. acks=0 意味着生产者能够通过网络吧消息发送出去,那么就认为消息已成功写入Kafka 一定会丢失一些数据 2. acks=1 意味着首领在疏导消息并把它写到分区数据问津是会返回确认或者错误响 ...

  6. UOJ#348 州区划分

    解:有一个很显然的状压...... 就设f[s]表示选的点集为s的时候所有方案的权值和. 于是有f[s] = f[s \ t] * (sum[t] / sum[s])P. 这枚举子集是3n的. 然后发 ...

  7. Tomcat 日志文件分割

    新到公司, 拿到了前辈们留下的 程序 “病历书” , 上面记载了项目上的一些 经常会犯的毛病,  还有相应的解决方法. 其中有的是因为后台 代码逻辑上的一些原因 , N手代码通病了吧 (这个还是以后再 ...

  8. busybox(三)最小根文件系统

    目录 busybox(三)最小根文件系统 引入 构建终端 构造inittab 配置应用程序 构建C库 制作映像文件yaffs title: busybox(三)最小根文件系统 tag: arm dat ...

  9. SpringCloud笔记五:Feign

    目录 什么是Feign? 有了Ribbon我还要Feign干嘛? 新建consumer-feign 修改api项目 引入Maven文件 新建feign的接口 启动项目 报错 发泄发泄心情,一个段落 什 ...

  10. [JDK8]性能优化之使用LongAdder替换AtomicLong

    如果让你实现一个计数器,有点经验的同学可以很快的想到使用AtomicInteger或者AtomicLong进行简单的封装. 因为计数器操作涉及到内存的可见性和线程之间的竞争,而Atomic***的实现 ...