当前位置:网站首页>unix环境编程 第十五章 15.6 XSI IPC

unix环境编程 第十五章 15.6 XSI IPC

2022-08-09 10:26:00 玛丽苏打肉饼

15.6.1标识符和键

每个内核中的IPC结构(消息队列,信号量或共享存储段)都用一个非负整数的标识符加以引用。当一个IPC结构被创建,然后又被删除的时候,与这种结构相关的标识符连续加1,直至达到一个整型数的最大正值,然后又转回到0.

每个IPC对象都与一个键相关联,将这个键作为该对象的外部名。

无论何时创建IPC结构,都应指定一个键。这个键的数据类型是基本系统数据类型key_t,通常在头文件中被定义为长整型。这个键由内核编程标识符。这个键由内核变换成为标识符。

有多种方法使客户进程和服务器进程在同一IPC结构上面汇聚。

  1. 服务器进程可以指定键IPC_PRIVATE创建一个新的IPC结构,将返回的标识符存放在某处以便客户进程取用。IPC_PRIVATE键也可用于父进程子关系。父进程指定IPC_PRIVATE创建一个新IPC结构 ,所返回的标识符可供fork后的子进程使用。
  2. 可以在一个公共头文件中顶一个客户进程和服务器进程都认可的键。然后服务器进程指定此键创建一个新的IPC结构。
  3. 客户进程和服务器进程认同一个路径名和项目ID,接着,调用函数ftok将这两个值变为一个键。

ftok提供的唯一服务就是由一个路径名和项目ID产生一个键。

#include <sys/ipc.h>
key_t ftok(const char* path,int id);
//成功返回键,失败返回-1

path参数必须引用一个现有的文件,当产生键的时候,只使用id参数的低8位。

fork创建的键通常是用下列方式构成的:按给定的路径名取得其stat结构中的部分st_dev和st_ino字段,然后再将他们与项目ID组合起来。如果两个路径名引用的是两个不同的文件,那么ftok通常会为这两个路径名返回不同的键。但是因为i节点编号和键通常都存放在长整形中,所以创建键时可能会丢失信息。这意味着,对于不同文件的两个路径名,如果使用同意项目ID,那么可能产生相同的键。

15.6.2权限结构

XSI IPC为每一个IPC结构关联了一个ipc_perm结构。

创建IPC结构的时候,对所有的字段都赋初值。以后,可以调用msgctl,semctl,shmctl修改uid,gid和mode字段。为了修改这些值,调用进程必须是IPC结构的创建者或超级用户。

原网站

版权声明
本文为[玛丽苏打肉饼]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43873960/article/details/121640329