System V 消息队列
1. 消息队列概念及特性
- 消息队列提供是进程间数据块传输的方法
- 传输的每一个数据块都认为是有类型的,不同的数据块是有优先级的
- 消息队列中的数据都是先进先出的,整个队列中的数据是用链表组织起来的
2. 消息队列出队特点
3. 消息队列函数接口
3.1 获取一个消息队列
int msgget(key_t key, int msgflg);
功能:以特定的消息队列标识符创建一个消息队列,并返回消息队列的操作句柄
头文件:
- sys/types.h
- sys/ipc.h
- sys/msg.h
参数:
- key : 自定义文件标识符
- msgflg :
宏 | 含义 |
---|---|
IPC_CREAT | 若共享内存不存在,则创建 |
IPC_EXCL | 与IPC_CREAT一同使用,为了确保共享内存已经存在时,会报告错误 |
3.2 向消息队列中发送数据
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
功能:一个进程向 指定的消息队列 中发送数据块
头文件:
- sys/types.h
- sys/ipc.h
- sys/msg.h
参数:
- msqid:消息队列操作句柄,msgget的返回值
- msgp:存储数据的空间地址
- msgsz:数据块大小,字节为单位
- msgtyp:数据类型
- msgflg
宏 | 含义 |
---|---|
IPC_NOWAIT | 非阻塞模式 |
0 | 阻塞模式 |
3.3 从消息队列中获取数据
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
功能:一个进程从 指定的消息队列 中接收数据
头文件:
- sys/types.h
- sys/ipc.h
- sys/msg.h
参数:
- msqid:消息队列操作句柄,msgget的返回值
- msgp:接收来的数据存放的空间的地址
- msgsz:最大接受数据块大小
- msgtyp:数据类型。若是0:取出消息队列中的第一个元素;若大于0,取出优先级和msgtyp相等的元素;若小于0, 对msgtyp取绝对值,在0 ~|msgttyp|中寻找优先级最小的元素返回
- msgflg
宏 | 含义 |
---|---|
IPC_NOWAIT | 非阻塞模式 |
0 | 阻塞模式 |