《Unix网络编程》卷2 读书笔记 第3章- System V IPC
1. 概述
- 三种类型的System V IPC:System V 消息队列、System V 信号量、System V 共享内存区
- System V IPC在访问它们的函数和内核为它们维护的信息上共享许多类似点。本章讲述所有这些共同属性。
- 下图汇总了所有System V IPC 函数

2. key_t键、ftok函数
- 头文件sys/types.h把数据类型key_t定义为一个整数,通常是一个至少32位的整数
#include <sys/ipc.h>key_t ftok (const char *pathname, int id);on error
- 函数ftok把一个已经在的路径名和一个整数标识符转换成一个key_t值,称为IPC键
- 如果pathname不存在,或者对于调用进程不可访问,ftok返回-1
- 不能保证两个不同的路径名与同一个id的组合产生不同的键。
3. ipc_perm结构
- 内核给每个IPC对象维护一个信息结构,其内容跟内核给文件维护的信息类似
struct ipcqerm {uid_t uid; /* owner's user id */gid_t gid; /* owner's group id */uid_t cuid; /* creator's user id */gid_t cgid; /* creator's group id */mode_t mode; /* read - write permissions */ulong_t seq; /* slot usage sequence number */key_t key; /* IPC key */};
4. 创建与打开IPC通道
- 对于key值,应用程序有两种选择
- 调用ftok,给它传递pathname和id
- 指定key为IPC_PRIVATE,这将保证会创建一个新的、唯一的IPC对象

- 所有三个XXXget函数都有一个名为oflag的参数,它指定IPC对象的读写权限位(ipc_perm结构的mode成员),并选择是创建一个新的IPC对象,还是访问一个已存在的IPC对象。


- System V IPC定义了自己的IPC_XXX常值,而并不像标准open函数以及Posix IPC函数那样使用O_CREAT和O_EXCL常值
- 注意:System V IPC函数将它们的IPC_XXX常值根权限位合到单个oflag参数中。而open函数有一个名为oflag和mode的参数
5. IPC 权限
- 每当使用某个XXXget函数创建一个新的IPC对象时,以下信息就保存到该对象的ipc_perm结构中
- oflag参数中的某些位初始化ipc_perm结构的mode成员。SEM_A的后缀A代表alter改变

- ipc_perm结构中cuid和cgid成员分别设置为调用进程的有效用户ID和有效组ID,这两个成员合称为创建者ID
- ipc_perm结构中的uid和gid成员也分别设置为调用进程的有效用户ID和有效组ID,这两个成员合称为属主ID
- oflag参数中的某些位初始化ipc_perm结构的mode成员。SEM_A的后缀A代表alter改变
- 尽管一个进程可以通过调用XXXctl函数修改属主ID,但创建者ID却从不改变。XXXctl函数还允许一个进程修改某个IPC对象的mode成员
- 每当一个进程访问某个IPC对象时,IPC就执行两级检查,该对象被打开时(XXXget函数)执行一次,以后每次使用该对象时执行一次

6. 标识符重用
- ipc_perm结构中含有一个seq的变量,它是一个槽位使用情况序列号。该变量是一个由内核为系统中每个潜在的IPC对象维护的计数器。每当删除一个IPC对象时,内核就递增相应的槽位号,若溢出则循环为0 。
- 该计数器的存在有两个原因:
- 考虑由内核维护的用于打开文件的文件描述符。它们是些小整数,只在单个进程内有意义,是进程特定的值。然而,System V IPC标识符却是系统范围的,而不是特定于进程的
- 为了避免短时间内重用System V IPC标识符
7. ipcs、ipcrm程序
- 只能用于System V IPC,而不能用于Posix IPC
- ipcs -q -m -s
- ipcrm --all=msg
8. 内核限制
- sysctl命令
《Unix网络编程》卷2 读书笔记 第3章- System V IPC的更多相关文章
- [转载] 读《UNIX网络编程 卷1:套接字联网API》
原文: http://cstdlib.com/tech/2014/10/09/read-unix-network-programming-1/ 文章写的很清楚, 适合初学者 最近看了<UNIX网 ...
- 《Linux/Unix系统编程手册》读书笔记 目录
<Linux/Unix系统编程手册>读书笔记1 (创建于4月3日,最后更新4月7日) <Linux/Unix系统编程手册>读书笔记2 (创建于4月9日,最后更新4月10日) ...
- 《Linux/Unix系统编程手册》读书笔记9(文件属性)
<Linux/Unix系统编程手册>读书笔记 目录 在Linux里,万物皆文件.所以文件系统在Linux系统占有重要的地位.本文主要介绍的是文件的属性,只是稍微提及一下文件系统,日后如果有 ...
- 《Linux/Unix系统编程手册》读书笔记8 (文件I/O缓冲)
<Linux/Unix系统编程手册>读书笔记 目录 第13章 这章主要将了关于文件I/O的缓冲. 系统I/O调用(即内核)和C语言标准库I/O函数(即stdio函数)在对磁盘进行操作的时候 ...
- 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...
- 《Linux/Unix系统编程手册》读书笔记6
<Linux/Unix系统编程手册>读书笔记 目录 第9章 这章主要讲了一堆关于进程的ID.实际用户(组)ID.有效用户(组)ID.保存设置用户(组)ID.文件系统用户(组)ID.和辅助组 ...
- 《Linux/Unix系统编程手册》读书笔记5
<Linux/Unix系统编程手册>读书笔记 目录 第8章 本章讲了用户和组,还有记录用户的密码文件/etc/passwd,shadow密码文件/etc/shadow还有组文件/etc/g ...
- 《Linux/Unix系统编程手册》读书笔记4
<Linux/Unix系统编程手册>读书笔记 目录 第7章: 内存分配 通过增加堆的大小分配内存,通过提升program break位置的高度来分配内存. 基本学过C语言的都用过mallo ...
- 《Linux/Unix系统编程手册》读书笔记3
<Linux/Unix系统编程手册>读书笔记 目录 第6章 这章讲进程.虚拟内存和环境变量等. 进程是一个可执行程序的实例.一个程序可以创建很多进程. 进程是由内核定义的抽象实体,内核为此 ...
随机推荐
- hdu 1669(二分+多重匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...
- lintcode:快乐数
快乐数 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是 ...
- windows条件下,Ping加上时间戳,并保存到文件,适用于测试网络
在c盘下面新建文件 ping.vbs 在 ping.vbs中输入代码如下: Dim args, flag, unsuccOut args="" otherout="&qu ...
- [iOS]URL编码和解码
1. 首先来看下什么样的是URL编码(字符串中带有%22 类似这样的) NSString *str = @"http://m.tuniu.com/api/home/data/index/c/ ...
- MyBatis学习总结_01_MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- POJ2126——Prime Path(BFS)
Prime Path DescriptionThe ministers of the cabinet were quite upset by the message from the Chief of ...
- chrome开发配置(三)安装开发工具
1.安装 VisualStudio2010,设置环境变量 GYP_MSVS_VERSION=2010 2.安装 VisualStudio2010 SP1 3.安装 windows 8.0 sdk(不要 ...
- 关于MySQL
DBMS - 数据库管理系统(Database Management System) RDBMS - 关系数据库管理系统(Relational Database Management System) ...
- 每个PHP开发者都应该看的书
PHP这几年口碑很差.关于它的“糟糕设计的汇总”和语法上的矛盾有着大量的讨论,但是主要的抱怨通常是安全.很多PHP站点分分钟被黑掉,甚至一些有经验的.有见识的程序员会说,这门语言本身是不安全的. 我总 ...
- AE 栅格图分级渲染
ArcEngine对矢量数据进行风格化实在是得心应手,同样的对于栅格图像也能进行风格化!以前没接触过,今天正好需要,做出了栅格图像的渲染!下面实现的思路: 1.定义渲染的一系列接口 2.判断图像是否建 ...