当前位置:网站首页>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结构上面汇聚。
- 服务器进程可以指定键IPC_PRIVATE创建一个新的IPC结构,将返回的标识符存放在某处以便客户进程取用。IPC_PRIVATE键也可用于父进程子关系。父进程指定IPC_PRIVATE创建一个新IPC结构 ,所返回的标识符可供fork后的子进程使用。
- 可以在一个公共头文件中顶一个客户进程和服务器进程都认可的键。然后服务器进程指定此键创建一个新的IPC结构。
- 客户进程和服务器进程认同一个路径名和项目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结构的创建者或超级用户。
边栏推荐
猜你喜欢
随机推荐
元组 字典 集合
源代码阅读器项目
OpenGL 2.0编程例子
OneNote 教程,如何在 OneNote 中搜索和查找笔记?
Celebrate ranked 18
京东物流与五菱将开发联名版定制产品
使用.NET简单实现一个Redis的高性能克隆版(四、五)
Cpolar内网穿透的面板功能介绍
By asking where the variables are stored, the shepherd boy laughed and said to use pointers, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the use of go lang type pointers (Poin
深度学习--自编码器(AutoEncoder)
极域Killer 1.0代码
深度学习--神经网络(基础讲解)
Qt 国际化翻译
Received your first five-figure salary
OpenGL ES2.0编程三部曲(转载自MyArrow)
Umi Hooks
Nodejs服务端
snmp++编译错误问题解决方法
在犹豫中度过了老多天,今天的工作时记录
MySQL和MyEclipse的数据库连接操作