Linux进程间通信IPC学习笔记之消息队列(Posix)
基础知识:
消息队列可认为是一个消息链表,有足够写权限的线程可往队列中放置消息,有足够读权限的线程可以从队列中取走消息。在某个进程往一人队列写入消息之前,并不需要另外某个进程在该队列上等待消息的到达。其特性为:
1)具有内核的持续性:即当一个进程往某一个队列写入一些消息后终止,而另一个进程可以在以后的某个时刻取出该消息;
2)
#include <mqueue.h>
mqd_t mq_open(const char *name, int oflag, ...
/* mode_t mode,struct mq_attr *attr */);
返回:若成功则返回消息队列描述符,否则返回-1
#include <mqueue.h>
int mq_close(mqd_t mqdes);
返回:若成功返回0,否则返回-1
#include <mqueue.h>
int mq_unlink(const char *name);
返回:若成功返回0,否则返回-1
#include <mqueue.h>
int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned msg_prio);
返回:若成功返回0,否则返回-1
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len,
unsigned *msg_prio);
返回:若成功返回消息中字节数,否则返回-1
#include <mqueue.h>
int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat);
int mq_setattr(mqd_t mqdes, const struct mq_attr *restrict mqstat,
struct mq_attr *restrict omqstat);
返回:若成功返回0,否则返回-1
#include <mqueue.h>
#include <time.h>
ssize_t mq_timedreceive(mqd_t mqdes, char *restrict msg_ptr,
size_t msg_len, unsigned *restrict msg_prio,
const struct timespec *restrict abs_timeout);
int mq_timedsend(mqd_t mqdes, const char *msg_ptr, size_t msg_len,
unsigned msg_prio, const struct timespec *abs_timeout); #include <mqueue.h>
int mq_notify(mqd_t mqdes, const struct sigevent *notification);
返回:若成功返回0,否则返回-1
struct mq_attr{
long mq_flags; //message queue flags
long mq_maxmsg; //maximum number of messages
long mq_msgsize; //maximum message size
long mq_curmsgs; //number of messages currently queued
};
struct sigevent
{
int sigev_notify; //notification type
int sigev_signo; //signal number
union sigval sigev_value; //signal value
void (*sigev_notify_function) (union sigval); //notification function
pthread_attr_t *sigev_notify_attributes; //notification attributes
}
union sigval
{
int sival_int; //integer value
void *sival_ptr; //pointer value
}
测试代码:
参考资料:
Linux进程间通信IPC学习笔记之消息队列(Posix)的更多相关文章
- Linux进程间通信IPC学习笔记之消息队列(SVR4)
Linux进程间通信IPC学习笔记之消息队列(SVR4)
- Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
Linux进程间通信IPC学习笔记之同步二(SVR4 信号量)
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
- Linux进程间通信IPC学习笔记之有名管道
基础知识: 有名管道,FIFO先进先出,它是一个单向(半双工)的数据流,不同于管道的是:是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)有一个与路径名关联的名 ...
- Linux进程间通信IPC学习笔记之管道
基础知识: 管道是最初的Unix IPC形式,可追溯到1973年的Unix第3版.使用其应注意两点: 1)没有名字: 2)用于共同祖先间的进程通信: 3)读写操作用read和write函数 #incl ...
- Linux进程间通信IPC学习笔记
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...
- Linux进程间通信IPC学习笔记之同步一(线程、互斥锁和条件变量)
基础知识: 测试代码: 参考资料: Posix 多线程程序设计
- c/c++ linux 进程间通信系列6,使用消息队列(message queue)
linux 进程间通信系列6,使用消息队列(message queue) 概念:消息排队,先进先出(FIFO),消息一旦出队,就从队列里消失了. 1,创建消息队列(message queue) 2,写 ...
- Linux进程间通信(七):消息队列 msgget()、msgsend()、msgrcv()、msgctl()
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信 -- 使用命名管道 一.什么是消息队列 消息队列提 ...
随机推荐
- block的简单使用:点击按钮在另一个控制器内调用block内的代码
1.自定义一个继承于UIButton的按钮 2.声明block: 返回值类型 函数名 参数列表 typedef void (^ButtonBlock)(UIButton *); @interfa ...
- javaweb学习总结三(枚举)
一:枚举的概念 定义特定的数据,尤其像一些状态位. 二:定义枚举类 1:定义枚举,其中Grade枚举可以看做类,A.B.C.D.E可以看做对象,因为它定义了有参数的构造方法,所以 对象后面必须带参数. ...
- 跟我一起学习VIM - The Life Changing Editor
前两天同事让我在小组内部分享一下VIM,于是我花了一点时间写了个简短的教程.虽然准备有限,但分享过程中大家大多带着一种惊叹的表情,原来编辑器可以这样强大,这算是对我多年来使用VIM的最大鼓舞吧.所以分 ...
- ACM进阶
ACM队不是为了一场比赛而存在的,为的是队员的整体提高. 大学期间,ACM队队员必须要学好的课程有: l C/C++两种语言 l 高等数学 l 线性代数 l 数据结构 l 离散数学 l 数据库原理 l ...
- 20个2014年最优秀的PHP框架
http://www.php100.com/html/it/mobile/2014/0813/7198.htmlhttp://medoo.in/api/select
- Font Awesome图标字体库(2015年05月25日)
Font Awesome是一款非常棒的字体图标工具,给个地址,具体的自已慢慢去体会,只能帮你到这儿了...... http://fortawesome.github.io/Font-Awesome/ ...
- java演示facade(外观)模式
实际应用中,原来的代码涉及多个子系统时,重新进行类的设计,将原来分散在源码中的类结构及方法重新组合,形成新的.统一的接口,供上层应用使用. Facade所面对的往往是多个类或其它程序单元,通过重新组合 ...
- 《HTML5 and Javascript Web Apps》读书笔记要点摘录
必须要承认的是这本由Wesley Hales编写的书对要进军web apps 的程序员(媛)来说绝对是福音,很薄的一本书简明扼要的说明了web apps的实现原理,实现工具以及优缺点.拾人牙慧,作此摘 ...
- HDOJ2019数列有序!
数列有序! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- AIDL简单使用
1.AIDL定义 AIDL是android interface definition language的缩写,它对android IPC组件Binder进行了封装.使用它不需理会底层IPC的实现,只需 ...