当前位置:网站首页>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结构的创建者或超级用户。
边栏推荐
猜你喜欢
相伴成长,彼此成就 用友U9 cloud做好制造业数智化升级的同路人
Transformer+Embedding+Self-Attention原理详解
壁纸
2021-01-11-雪碧图做表情管理器
编解码(seq2seq)+注意机制(attention) 详细讲解
深度学习--循环神经网络(Recurrent Neural Network)
机器学习--线性回归(Linear Regression)
Nodejs服务端
开源SPL,WebService/Restful广泛应用于程序间通讯,如微服务、数据交换、公共或私有的数据服务等。
深度学习--生成对抗网络(Generative Adversarial Nets)
随机推荐
1002 写出这个数 (20 分)
抛出一个问题? Mysql环境下进行Count操作执行的时候速度很慢_需手动给主键添加索引---MySql优化001
EndNote User Guide
cannot import name ‘load_offloaded_weights‘ from ‘accelerate.utils‘ (/home/huhao/anaconda3/envs/huha
MySQL全文索引
单元测试1之单元测试的引用
【MySQL】mysql因为字符集导致left join出现Using join buffer (Block Nested Loop)
SQL Server查询优化
10000以内素数表(代码块)
通过Doc在MySQL数据库中建表
[贴装专题] 视觉贴装平台与贴装流程介绍
京东物流与五菱将开发联名版定制产品
libavcodec.dll导致游戏不能运行及explorer关闭
基于信号量与环形队列实现读写异步缓存队列
机器学习--线性回归(Linear Regression)
Win32控件------------显示系统使用的控件版本
编程技术提升
深度学习--自编码器(AutoEncoder)
学习NET-SNMP之一 ---------编译NET-SNMP程序。
Attentional Feature Fusion