3.3 SYSTEM Ⅴ进程间通信
Linux完全支持Unix System V中的3种IPC机制:消息队列、信号量、共享内存。系统V的IPC机制十分类似于文件,其使用过程是:
(1)创建或打开IPC对象,获得该对象的引用描述符。
(2)利用引用描述符使用IPC对象。
(3)关闭或释放IPC对象。
对象的引用描述符是它在对象表中的索引。每种IPC机制都有自己的一套数据结构,虽然这些结构的内容互不相同,但每种对象的数据结构中都包含一个ipc_perm结构,它含有创建者的用户及组标志、所有者的用户及组标志、对象的存取模式以及IPC对象键(key),以确定一个IPC操作是否可访问该资源。ipc_perm结构描述对一个系统V IPC对象的存取权限。
struct ipc_perm
{
key_t key; /* 键 */
ushort uid; /*所有者 uid*/
ushort gid; /*所有者 gid */
ushort cuid; /*创建者 uid */
ushort cgid; /*创建者 gid */
ushort mode; /*读/写权限*/
ushort seq; /*序列号*/
};
结构ipc_perm的成员mode的低九位定义了对该资源的访问许可,以确定一个执行了ipc系统调用的进程能否访问该资源。
IPC对象键值被用来定位系统V IPC对象的引用标志符。这样的键值一共有两组:
公有:如果此键为公有,则系统中任何进程,只要通过了权限检查,就可以获得该键(key)所对应的IPC对象的引用描述符。系统V IPC对象不能直接用一个键值来引用,而只能使用引用描述符。
私有:则键值为0,说明每个进程都可以用键值0建立一个专供其私用的对象。
虽然Linux在3种IPC对象上定义了许多操作,但只提供了一个系统调用sys_ipc,通过该系统调用,可以实现所有的IPC操作。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。