Posix IPC包含三种类型的IPC:Posix消息队列、Posix信号量和Posix共享内存区
Posix IPC名字
必须符合已有的路径名规则(必须最多PATH_MAX字节构成,包含结尾的空字节)
如果以斜杠符开头,函数的不同调用将访问同一个队列。如果不以斜杠符开头,效果取决于实现
名字中额外斜杠符的解释由实现定义
为了移植,Posix IPC名字必须以一个斜杠符开头,并且不能含有任何其他斜杠符。为了避免移植性问题,应该把Posix IPC名字的#define行放在一个便于修改的头文件。解决上述移植性问题的另一个办法是定义一个px_ipc_name函数,为定位Posix IPC名字添加正确的前缀目录
char *px_ipc_name(const char *name); # name参数不能有任何斜杠符,Solaris返回/name,Unix返回/tmp/name
创建与打开IPC对象
mq_open、sem_open和shm_open三个创建或打开一个IPC对象的函数,oflag参数指定怎样打开请求的对象。创建一个新的消息队列、信号量或共享内存区对象时,至少需要mode参数,指定权限位。三个函数打开一个存在的消息队列、信号量或共享内存区对象时,需要基于如下信息执行权限测试:创建时赋予IPC对象的权限位;请求访问类型O_RDONLY、O_WRONLY或O_RDWR;调用进程的有效ID、有效组ID及各个辅助组ID
打开或创建Posix IPC对象所用的各种oflag常值
创建新的IPC对象所用的mode常值
O_EXCL:如果该标志和O_CREAT一起指定,那么IPC函数只在所指定名字的消息队列、信号量或共享内存区对象不存在时才创建新的对象。如果对象已经存在,那么返回一个EEXIST错误
打开一个IPC对象的真正逻辑流程