先说POSIX的吧:
mq_open,sem_open,shm_open着三个函数用于创建或者打开一个IPC通道。
由此可见,消息队列的读写权限是任意的,然而信号灯就没有,实际上,信号灯都需要读和写权限罢了。共享内存不能只以只写方式打开,否则不能往共享内存中写数据的。
在创建一个新的消息队列或者信号灯或者共享内存的时候,可能需要mode_t权限标志:
S_IRUSER 用户读 S_IWUSER 用户写 S_IRGRP 用户组读 S_IWGRP 用户组写 S_IROTH 其他用户读 S_IWOTH 其他用户写
其中所指定的文件权限位受当前进程文件模式创建掩码,但我们可以通过umask()修正。
这里注意的是O_NONBLOCK标志,该标志使得一个消息队列在队列为空的时候读或消息队列填满是写被阻塞,O_TRUNKC标志,如果以读写模式打开一个已存在的共享内存去对象那么该标志将使得该对象的长度被结成0.
本图是显示创建IPC通道的一般逻辑和思路。
2,SYSTEM V的方法: