Posix IPC
概述
- Posix消息队列
- Posix信号量
- Posix共享内存区
IPC名字
Posix.1描述Posix IPC名字
- 它必须符合已有的路径名规则【最多由PATH_MAX字节构成,包括结尾的空字节】
- 如以斜杠符开头,则对这些函数的不同调用将访问同一个队列。不以斜杠符开头,效果取决于实现。
- 名字中额外的斜杠符解释由实现定义。
一般把Posix IPC名字的#define行放在一个便于修改的头文件。
Posix.1定义了三个宏:
S_TYPEISMQ(buf)
S_TYPEISSEM(buf)
S_TYPEISSHM(buf)
它们的单个参数是指向某个stat结构的指针,其内容由fstat,lstat或stat这三个函数填入。
如果所指定的IPC对象【消息队列,信号量,共享内存区对象】是作为一种独特的文件类型实现的,
且参数所指向的stat结构访问这样的文件类型,
则这三个宏计算出一个非0值。
否则,计算出0。
px_ipc_name函数
#include "unpipc.h"
char *px-ipcpame(const char *name);
创建与打开IPC通道
消息队列可以 只读/只写/读写 任意模式打开。
信号量的打开不指定任何模式【任意信号量操作,都需要读写访问权】,
共享内存区对象则不能以只写模式打开。
第二,三行是可选的。
- O_CREAT
若不存在则创建由函数第一个参数所指定名字的消息队列,信号量或共享内存区对象【检查O_EXCL】