进程管理--消息队列
来源:互联网 发布:windows更新卡住了 编辑:程序博客网 时间:2024/06/06 04:38
Linux进程间通讯——消息队列
一、什么是消息队列
消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型地数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。
Linux用宏MSGMAX和MSGMNB来限制一条消息的最大长度和一个队列的最大长度。
二、在Linux中使用消息队列
Linux提供了一系列消息队列的函数接口来方便我们实现进程间通讯。
————————————————————————————————
1、ftok(3)函数
#include <sys/types.h>
#include <sys/ipc.h>
key_t ftok(const char *pathname, int proj_id)
功能:将pathname和proj_id转化为system v IPC键值
参数:
pathname:需要是存在的、有访问权限的文件路径
proj_id:非0的整数。但是系统使用的是这个整数的有效低8位
返回值:
成功——key值被返回
-1——失败,errno被设置
————————————————————————————————
2、msgget(2)函数
int msgget(key_t key, int msgflg);
功能:获取一个消息队列
参数:key:ftok(3)的返回值
msgflg:
IPC_CREAT——如果消息队列不存在,则创建消息队列。注意权限的问题。
0 ——只是获取消息队列
返回值:
-1——失败 errno被搁置
非负整数——消息队列的ID
————————————————————————————————
3、msgsnd(2)函数
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
功能:向消息队列里放消息
参数:
msqid——指定了要操作的消息队列。msgget(2)的返回值
msgp——struct msgbuf{
long mtype;/* 消息类型,必须>0*/
char mtext[1]; /* message data*/
};
msgsz——是struct msgbuf结构体成员mtext的长度。
msgflg——IPC_NOWAIT (在空间不足的情况下立即返回)
0(在空间不足的情况下,阻塞到空间充足)
返回值:
0——成功
-1——失败 errno被设置
—————————————————————————————————
4、msgrcv(2)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg)
- 进程管理--消息队列
- swoole教程第一节:进程管理模块(Process)-中(消息队列)
- 进程和消息队列
- 进程和消息队列
- 进程通信消息队列
- [进程通信] 消息队列
- 进程通信--消息队列
- 进程通信-----消息队列
- 进程通信--消息队列
- 进程IPC---消息队列
- 多进程消息队列
- 进程通信之消息队列
- 进程间通讯--消息队列
- 多进程--消息队列--聊天工具
- 进程通信之消息队列
- linux消息队列进程通信
- 进程间消息队列通信
- linux消息队列进程通信
- HDU2795 Billboard题解
- (转)什么是DevOps?阿里专家为你来解读
- UNIX环境高级编程笔记之高级I/O
- 关于“百度未授权使用地图API”的解决方案
- 求二叉树的深度 递归 非递归
- 进程管理--消息队列
- Google MapReduce
- 第5周实践项目2 链栈的算法库建立
- 面试笔记
- typedef和#define的用法与区别
- Redis的数据类型
- 搜狗笔试
- 网络编程复习(六):Netty入门Demo
- 使用Log4j时,为什么要写if (log.isDebugEnabled()) 或 if (log.isInfoEnabled())