mq_send
NAME
mq_send - 将消息发送到消息队列 (REALTIME)
SYNOPSIS
#include <mqueue.h>
int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,unsigned msg_prio);
DESCRIPTION
函数 mq_send() 会将参数 msg_ptr 指向的内容发送给参数mqdes 指向的消息队列.
参数 msg_len 指定消息的大小(用字节数表示). 参数 msg_len 的值应该不大于消息队列的属性 mq_msgsize 的值, 否则函数执行失败.
如果指定的消息队列不为空, mq_send() 的操作类似将消息插入在消息队列的指定位置,指定位置是通过参数 msg_prio 来指定.
参数 msg_prio 值大的消息会被插入在参数 msg_prio值小的消息前;如果值相等,则插在后面. 参数 msg_prio 的值应该小于 {MQ_PRIO_MAX}.
如果指定的消息队列满了并且 O_NONBLOCK(mq_open中设置) 未被设置, 函数mq_send() 会阻塞, 一直到消息可以被插入队列或者函数 mq_send() 被信号中断.
如果有几个线程都在等待消息队列的空闲资源向, 在支持优先级调度的系统中, 优先级最高的线程先解除阻塞,如果优先级相同则等待时间最长的线程先解除阻塞;
不支持优先级调度的系统中, 哪一个等待线程解除阻塞是未说明的.
如果指定的消息队列满了并且 O_NONBLOCK被设置了,函数 mq_send() 会失败返回.
PARAMETERS
①mqdes
消息队列的描述符
②msg_ptr
指向消息结构体的指针
③msg_len
消息的字节数, 不能大于 mq_msgsize
④msg_prio
消息的优先级,
优先级大的消息会插队在优先级小的消息前面;
同优先级的消息会插队在后面(时间先后).
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 指定的大小超过了消息队列的消息大小属性.
EXAMPLES
mq_send的更多相关文章
- 002:IPC与system函数简介
1:IPC名字mq_XXX,sem_XXX,shm_XXX. 消息队列 信号量 共享内存区 <mqueue.h> <semaphore.h> <sys.mman.h> ...
- Linux IPC POSIX 消息队列
模型: #include<mqueue.h> #include <sys/stat.h> #include <fcntl.h> mq_open() //创建/获取消 ...
- IPC-----POSIX消息队列
消息队列可以认为是一个链表.进程(线程)可以往里写消息,也可以从里面取出消息.一个进程可以往某个消息队列里写消息,然后终止,另一个进程随时可以从消息队列里取走这些消息.这里也说明了,消息队列具有随内核 ...
- Posix消息队列
转载于:http://blog.csdn.net/zx714311728/article/details/53197196 1.消息队列 消息队列可以认为是一个消息链表,消息队列是随内核持续的.队列中 ...
- IPC 机制简介
IPC 机制简介 概述 在Unix早期发展中,做出重大贡献的两大主力Bell实验室和伯克利大学(BSD)在IPC(InterProcess Communication)方面的侧重点有所不同.前者对Un ...
- 第5章 Posix 消息队列
5.1 概述 消息队列可以认为是一个链表.有写权限的线程可往消息队列中放置消息,有读权限的线程可以从消息队列中取走消息. 消息队列和管道/FIFO的区别: (1)消息队列往一个队列中写消息前,并不需要 ...
- mq_open
NAME mq_open - 打开一个消息队列 (REALTIME) SYNOPSIS #include <mqueue.h> mqd_t mq_open(const char *name ...
- [置顶] Linux信号相关笔记
最近又温习了一遍Linux中的信号知识,发现有很多东西以前没有注意到,就通过这篇博客记录一下,巩固一下知识点. 一,信号基础: 信号是什么?为了回答这个问题,首先要从异常说起,这里的异常不是指c++/ ...
- posix 消息队列
注意 在涉及到posix消息的函数时, gcc 编译时要加-lrt参数, 如 gcc -lrt unpipc.c mqpack.c send.c -o send gcc -lrt unpipc.c m ...
随机推荐
- Centos 安装 p7zip,即Linux下的7z
Centos 无法直接通过yum安装7z,我们一般通过repoforge,rpmforge的软件包进行安装,你只需要下载一个对应的包,直接安装就可以 p7zip-9.20.1-1.el4.rf.i38 ...
- [转]Linux Ubuntu上架设FTP
Linux Ubuntu上架设FTP http://www.blogjava.net/stonestyle/articles/369104.html 操作系统:ubuntu (GNU/Linux) 为 ...
- LoadRunner - 当DiscuzNT遇上了Loadrunner(下) (转发)
当DiscuzNT遇上了Loadrunner(下) 在之前的两篇文章中,基本上介绍了如何录制脚本和生成并发用户,同时还对测试报告中的几个图表做了简单的说明.今天这篇文章做为这个系列的最后一篇,将会介绍 ...
- 35.在PCB中删除元件
在PCB Editor里面,如果想进行什么操作,首先得点击这个命令,再点击你要操作的区域/元件,最后右键选择"Done",这样你才能完成一个操作.
- [rsync]——rsync文件同步和备份
实验环境 (1) Rsync服务器:10.0.10.158 (2) Rsync客户端:10.0.10.173 Rsync服务器端的配置 1. 安装xinetd和rsync # yum install ...
- jquery,js引入css文件,js引入头尾
jquery,js引入css文件,js引入头尾 今天在项目中,需要把20多个页面加上头和尾部,头和尾是我写的,所以小师傅把这个工作交给我了. 我开始往里面加,先引入common.css,在body开始 ...
- Kibana4学习<二>
生产环境部署 Kibana4 是是一个完整的 web 应用.使用时,你需要做的只是打开浏览器,然后输入你运行 Kibana 的机器地址然后加上端口号.比如说:localhost:5601 或者 htt ...
- android listview和button,ImageButton等有事件的控件的总结
public ImageButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defSty ...
- 图解Git/图形化的Git参考手册
此页图解git中的最常用命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. ● git add fil ...
- EF 更新条目时出错。有关详细信息,请参见内部异常。
现象:使用EF新增记录时,一直报上述异常,网上说是值为空.主键外键未设等原因导致,但是改正这些情况下问题依然 解决过程:异常中有一句(请参见内部异常),一直都没有当回事,后来实在没办法就静下心来看了看 ...