当前位置: 代码迷 >> 综合 >> 15.6 XSI IPC (System Interface and Headers)
  详细解决方案

15.6 XSI IPC (System Interface and Headers)

热度:71   发布时间:2023-12-27 14:52:57.0
15.6 XSI IPC (System Interface and Headers)1.有三种称作XSI IPC的IPC: 消息队列、信号量、共享内存。他们有许多相似之处2.identifer(标识符)
(1)标识符和键1.每个内核中的IPC结构都用一个非负整数的标识符加以引用。	2.为使多个合作进程能够在同一IPC对象上汇聚,需要提供一个外部命名方案。3.每一个IPC对象都与一个键(KEY)关联,这个键作为该对象的外部名。4.无论何时创建IPC结构(msgget、semget、shmget)都应该制定一个键5.键的数据类型是(key_t), 通常被定义为长整形,6.键key_t通过调用函数(msgget、semget、shmget)由内核转换为IPC标识符7.XSI IPC的作用范围时整个操作系统,所以标识符是操作系统全局变量。8.只要知道标识符,任何进程都可通过标识符进行进程间的通信。(2) 权限结构1.XSI IPC为每一个IPC结构关联了一个ipc_perm结构.该结构规定了权限和所有者,至少包含以下结构:struct ipc_perm{key_t key;uid_t uid;gid_t gid;uid_t cuid;gid_t cgid;mode_t mode;	// access modes}2.其中mode用于控制IPC对象的读写权限,默认情况IPC对象只具有读写权限,不具备执行权限-----------------------------------------------------------------	权限					标志位					位-----------------------------------------------------------------	用户读					S_IRUSR					0400用户写					S_IWUSR					0200	用户组读				S_IRGRP					0040		用户组写				S_IWGRP					0020	其他读					S_IROTH					0004			其他写					S_IWOTH					0002-----------------------------------------------------------------	2.可以调用msgctl、semctl、shmctl修改uid gid mode字段
(3)	结构限制所有限制的XSI IPC都有内置限制,大多数限制都可以通过重新配置内核来改变。
(4)	优点和缺点缺点:1.IPC结构在系统范围内起作用的,没有引用计数。例如:创建了一个消息队列,并且消息队列上放入了几条消息,然后终止进程,那么该消息队列机器内容不会被删除直到某一个进程接收了该消息或者删除消息队列为止。2. XSI IPC对象在文件系统中没有名字,对其操作需要通过系统调用。
(5)根据文件名生成一个KEYkey_t ftok(const char *filename, int prj_num);	// file to key1. filename必须是一个现有的文件,不能时一个文件夹名(因为要用到filename的文件属性来生成key)2. ftok生成键的方式filename的stat结构中的st_dev和st_in字段,以及prj_num的后8位组合而来2. filename和prj_num唯一时, 不重启操作系统返回的key_t是操作系统唯一的。3. filename不同,prj_num相同,返回的key_t基本上不可能相同。

 

  相关解决方案