Posix消息队列相关函数
Posix消息队列(message queue)
IPC函数中常用的参数取值:
打开或创建POSIX IPC对象所用的各种oflag常值
o_RDONLY 只读
O_WRONLY 只写
O_RDWD 读写
O_CREAT 若不存在则创建,存在则引用
O_EXCL 排他性创建,需要和O_CREAT一起使用,当对象不存在时才创建,否则返回EEXIST错误
O_NONBLOCK 非阻塞模式
O_TRUNC 若已存在则截短
创建新的IPC对象所用的mode常值:
S_IRUSR 用户(属主)读
S_IWUSR 用户(属主)写
S_IRGRP 属组读
S_IWGRP 属组写
S_IROTH 其他用户读
S_IWOTH 其他用户写
mq_open()函数:
#include <mqueue.h> // 创建一个新的消息队列,或打开一个已存在的消息队列
// 成功返回消息队列描述符,出错 返回-1
mqd_t mq_open(const char *name, int oflag, ...
/* mode_t mode, struct mq_attr *attr */);
// name:Posix IPC名字(标识符)
// oflag取值: o_RDONLY、O_WRONLY、O_RDWD,可能按位或上O_CREAT、O_EXCL、O_NONBLOCK
// attr: 消息队列的属性(可以不指定此参数)
mq_close()函数:
#include <mqueue.h> // 关闭一个打开着的消息队列,但不从系统中将其删除,成功返回0,出错返回-1
int mq_close(mqd_t mqdes);
mq_unlink()函数:
#include <mqueue.h> // 从系统中删除一个消息队列,成功返回0,出错返回-1
int mq_unlink(const char *pathname);
注意:
大家可能在close和unlink之间存在疑惑,而除了此处的close和unlink,还有对文件的close和unlink
面对不同对象的close和unlink,表示的含义其实是相同的,close(关闭)即关闭open打开的对某个对
象的访问通道,而对于对象本身存在与否(创建/删除)没有影响,而unlink影响的是某个对象是否存在
一旦对某个对象的链接数(link)为0,且该对象没有被open,则该对象就会被彻底删除
上述的对象(File、Message Queue...等)
消息队列的属性:
struct mq_attr{
long mq_flags; // 消息队列的标志
long mq_maxmsg; // 队列允许的最大消息数量
long mq_msgsize; // 消息的最大长度(bytes)
long mq_curmsgs; // 此时存在与队列中的消息数量
};
mq_getattr()和mq_setattr()函数:
#include <mqueue.h> // 成功返回0,出错返回-1
// 将当前消息队列的属性填入参数attr指向的结构中
int mq_getattr(mqd_t mqdes, struct mq_attr *attr); // 给指定队列设置属性(attr,但只使用attr的attr.mq_flags成员),当oattr非空时,将指定队列的先前属性填入其中
int mq_setattr(mqd_t mqdes, const struct mq_attr *attr, struct mq_attr *oattr);
mq_send()和mq_receive()函数:
#include <mqueue.h> // 成功返回0,出错返回-1
// 往消息队列中放置一个消息
int mq_send(mqd_t mqdes, const char *ptr, size_t len, unsigned int prio);
// prio: 待发消息的优先级 // 成功返回消息的字节数,出错返回-1
// 从消息队列取出一个消息
ssize_t mq_receive(mqd_t mqdes, const char *ptr, size_t len, unsigned int *priop);
// 这里的len参数值不能小于能添加到指定队列中消息的最大大小(mq_attr.mq_msgsize)
mq_notify()函数:
#include <mqueue.h> // 成功返回0,出错返回-1
// 指定队列建立或删除异步事件通知
int mq_notify(mqd_t mqdes, const struct sigevent *notification);
相关结构:
union sigval{
int sival_int;
void *sival_ptr;
};
struct sigevent{
int sigev_notify;
int sigev_signo;
union sigval sigev_value;
void (*sigev_notify_function)(union sigval);
pthread_attr_t *sigev_notify_attributes;
};
Posix消息队列相关函数的更多相关文章
- 第三十四章 POSIX消息队列
POSIX消息队列相关函数 mq_open 功能: 用来创建和访问一个消息队列 原型: mqd_t mq_open(const char *name, int oflag); //只能用来打开消息队列 ...
- 进程间通信--POSIX消息队列
相关函数: mqd_t mq_open(const char *name, int oflag); mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, si ...
- 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 ...
随机推荐
- 03004_Web开发
1.Web开发中常见的概念 (1)B/S系统和C/S系统 ①Brower/Server:浏览器 服务器 系统------网站: ②Client/Server:客户端 服务器 系统------QQ.大型 ...
- app启动画面(prepo)
IPhone启动画面以及图标的设置 目前IPhone的分辨率为:320X480.640X960.640X1136. Default.png 320X480 iPh ...
- angularJS $scope的$apply方法实现model刷新
控制器内,$scope有个$apply方法,可以代码更改model并同步更新页面.通常,控制器内的方法执行完毕后仅会自动刷新一次页面展示,使用$apply方法即可在想刷新页面时就刷新.如本例,这个方法 ...
- Mac版有道云笔记不能自动同步
删除本地资源文件夹 /Users/xxxx/Library/Containers/com.youdao.note.YoudaoNoteMac 直接删除整个文件夹,之后重新登录账号.
- vim使用技巧二 模式
第一部分模式 第2章 普通模式 打开vim的默认状态即为普通模式 普通模式的命令强大 很大程度源于可以把操作符与动作命令结合在一起 技巧7 停顿时请移开画笔 工欲善其事,必先利其器 准 ...
- Xcode的代码块和代码块注释
我们看到的这些
- Unity3D for iOS初级教程:Part 3/3
转自Unity 3D for iOS 这篇文章还可以在这里找到 英语 Learn how to use Unity to make a simple 3D iOS game! 这份教程是由教程团队成员 ...
- BZOJ2246 [SDOI2011]迷宫探险 【记忆化搜索dp + 概率】
题目 输入格式 输出格式 仅包含一个数字,表示在执行最优策略时,人物活着走出迷宫的概率.四舍五入保留3位小数. 输入样例 4 3 3 2 .$. A#B A#C @@@ 143 37 335 85 9 ...
- P1681 最大正方形II (动态规划)
题目背景 忙完了学校的事,v神终于可以做他的"正事":陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上有有一行小 ...
- treetable 用法小例
插件地址:http://pan.baidu.com/s/1kVf0Kcfcript src="/plugins/jQuery/jQuery-2.1.4.min.js">< ...