进程间通讯——消息队列
来源:互联网 发布:广西网络教育培训网 编辑:程序博客网 时间:2024/06/06 04:00
1、概念:
消息队列与管道有许多相似之处,但少了打开管道和关闭管道的复杂操 作,它提供了一种两个不相关的进程之间传递数据简单且有效的方法。 与命名管道相比,消息队列的优势在于,它独立于发送和接收进程儿存 在,与管道一样的是都有长度限制,这里的长度限制是指消息队列提供向 一个进程向另一个进程发送数据块方法中数据块的最大长度限制。
2、消息队列的函数: #include<sys/msg.h>
(1) msgget函数:创建和访问一个消息队列
int msgget(key_t key,int msgflg);
key:键值,命名某个特定的消息队列;
msgflg:权限以及控制,IPC_CREAT标志:消息队列若存在就获取,不存在则 创建;
返回值:成功时返回队列标识符,失败时返回-1;
(2) msgsnd: 把消息添加到消息队列中;
int msgsnd(int msqid,const void *msg_ptr,size_t size,int flag);
msqid:由msgget函数返回的消息队列标识符;
msg_ptr:指向准备发送消息的指针,消息是一个结构体的长整型成员变量;
size:数据的大小;
flag:控制当前消息队列队满或达到限制;
返回值:成功返回0,失败返回-1;
(3) msgrcv:从一个消息队列中获取消息;
int msgrcv(int msqid,void *msg_ptr,size_t size,long int msgtype,int flag);
msqid:由msgget函数返回的消息队列标识符;
msg_ptr:指向准备接收消息的指针,息是一个结构体的长整型成员变量;
size:数据的大小;
msgtype:实现简单的接收优先级,如果msgtype的值为0,获取队列中第一个可用消息;如果msgtype的值大于0,获取具有相同息类型的第一个 消息;如果msgtype的值小
于0,获取消息类型等于或小于msgtype 绝对值的第一个消息;
flag:控制当队列中没有相应类型的消息可以接收时将发生的事。
返回值:成功返回接收缓存区的字节数,失败返回-1.
(4) msgctl:删除消息队列,与共享内存的控制函数相似;
int msgctl(int msqid,int command,struct msqid_ds *buf);
msqid:由msgget函数返回的消息队列标识符;
返回值:成功返回0,失败返回-1;
3、特点
与信号量相比:
都是以内核对象来确保多进程访问同一个消息队列,信号量进行同步控制,消息队列则发送实际数据;
与管道相比:
管道发送的数据没有类型,读取数据端无差别从管道中按照数据的前后顺序数据读取;消息队列数据有类型,读端可以根据类型读取特定数据。
- 进程间通讯——消息队列
- 进程间通讯——消息队列
- 进程间通讯—消息队列
- 进程间通讯————消息队列
- Linux—进程间通讯—消息队列
- 进程间通讯--消息队列
- 进程间通讯-消息队列
- 进程间通讯:消息队列
- Linux笔记_进程通讯——消息队列
- 进程间通讯--消息队列
- Linux进程间通讯之消息队列
- 进程间通讯--消息队列
- 进程间通讯--消息队列
- Linux进程间通讯之消息队列
- Linux进程间通讯之消息队列
- 进程间通讯之消息队列
- linux进程间通讯-消息队列
- Linux进程间通讯三--消息队列
- 问题
- 反射原理分析
- Cryp Trade World是什么?CTW是什么?
- Zookeeper在kafka中的应用
- 重温frameset、frame
- 进程间通讯——消息队列
- 【笔记】Java如何判断是IDE启动还是jar启动
- 软件安装
- QML之控制小车运动并绘制路径
- webpack+vue+vueRouter模块化构建完整项目实例详细步骤-入门篇
- java过滤器原理分析以及实现,通过过滤器实现自动登陆
- Java消息中间件学习笔记二 -- JMS规范
- 设计模式六大原则(4):接口隔离原则
- 工程师也该学习机器学习了!