02-Linux系统编程-04_消息队列、共享内存.pdf
文本预览下载声明
嵌入式系统工程师
消息队列、共享内存
消息队列、共享内存
2
大纲
大纲
消息队列(message queue)
共享内存(shared memory)
33
大纲
大纲
消息队列(message queue)
共享内存(shared memory)
44
消息队列概述
消息队列概述
消息队列是消息的链表,存放在内存中,由内核维护
消息队列的特点
消息队列允许一个或多个进程向它写入或者读取消
息,并且每条消息都有类型。
消息队列可以实现消息的随机查询,消息不一定要
以先进先出的次序读取,编程时可以按消息的类型
读取。
与无名管道、有名管道一样,从消息队列中读出消
息,消息队列中数据会被删除。
同样消息队列中的消息是有格式的。
55
消息队列概述
消息队列概述
只有内核重启或人工删除时,该消息才会被删除,若
不人工删除消息队列,消息队列会一直存在于内存中
消息队列标识符,来标识消息队列。消息队列在整个
系统中是唯一的。
在Linux操作系统中消息队列限制值如下:
消息队列个数最多为16个
消息队列总容量最多为16384字节
每个消息内容最多为8192字节
66
消息队列
消息队列
System V提供的IPC通信机制需要一个key值,通过key
值就可在系统内获得一个唯一的消息队列ID。
key值可以是人为指定的,也可以通过ftok函数获得。
77
消息队列
消息队列
#include sys/types.h
#include sys/ipc.h
key_t ftok(const char *pathname, int proj_id);
功能:
获得项目相关的唯一的IPC键值。
参数:
pathname:路径名
proj_id:项目ID,非0整数(只有低8位有效)
返回值:
成功返回key值,失败返回 -1。
88
消息队列
消息队列
创建消息队列:
#include sys/msg.h
int msgget(key_t key, int msgflg);
功能:
创建一个新的或打开一个已经存在的消息队列。
不同的进程调用此函数,只要用相同的key值就能得到
同一个消息队列的ID。
参数:
key:IPC键值
msgflg:标识函数的行为:IPC_CREAT(创建)或
IPC_EXCL(如果已经存在则返回失败)。
返回值:
成功:消息队列的标识符,失败:返回-1。
显示全部