一 什么是XSI IPC

    有三种 IPC我们称作XSI IPC,即消息队列、信号量以及共享存储器(共享内存),它们之间有很多相似之处。

二 标识符和键

    每个内核中的 IPC结构(消息队列、信号量或共享内存)都用一个非负整数的标识符加以引用。
   无论何时创建IPC结构(调用 msgget、semget 或shmget),都应指定一个关键字(key),关键字的数据类型由系统规定为 key_t,通常在头文件<sys/types.h>中被规定为长整型。关键字由内核变换成标识符。
  key的取法有两种:ftok和IPC_PRIVATE,(网上看到的)

三 两个进程(服务和客户)使用同一个IPC结构的方法

(1) 服务器进程可以指定键IPC_PRIVATE创建一个新的IPC结构,将返回的标识符存放在某处(如一个文件)以便和客户进程取用。也可用父子进程的方式传递。
(2) 在一个公用头文件 中定义 一个客户进程和服务器进程都认可的键。然后服务器进程指定此键创建一个新的IPC结构。
(3) 客户进程和服务器进程认同一个路径和项目ID(项目ID是0~255间的字符值),接着调用函数ftok将这两个值变换一个键。然后在方法(2)中使用此键。
#inlcude <sys/ipc.h>
key_t ftok(const char *path, int id);
path 参数必须引用一个现存文件,当产键时,保使用id参数的低8位。如果使用同一项目ID,那么对于不同文件 的两个路径可能产相同的键。

四 权限结构

XSI IPC为每一个IPC结构设置了一个 ipc _ perm结构。该结构规定了许可权和所有者。主要成员有:
struct ipc_perm {
uid_t uid ; /* owner's effective user id */
gid_t gid ; /* owner's effective group id */
uid_t cuid; /* creator's effective user id */
gid_t cgid ; /* creator's effective group id */
mode_t mode; /* access modes */
ulong seq ; /* slot usage sequence number */
key_t key; /* key */
}
详细的见<sys/ipc.h>在linux的源码中可以找到。
在创建IPC结构时,对所有字段都赋初值。以后,可以调用msgctl、semctl或shmctl修改uid、gid和mode字段。为了改变这些值,调用进程必须是IPC结构的创建者或超级用户。
 
五 Linux中,与IPC相关的命令包括:ipcs、ipcrm(释放IPC)

IPCS命令是Linux下显示进程间通信设施状态的工具。我们知道,系统进行进程间通信(IPC)的时候,可用的方式包括信号量、共享内存、消息队列、管道、信号(signal)、套接字等形式。使用IPCS可以查看共享内存、信号量、消息队列的状态。

例如在CentOS6.0上执行ipcs
具体的用法总结如下:
1、显示所有的IPC设施
# ipcs -a
2、显示所有的消息队列Message Queue
# ipcs -q
3、显示所有的信号量
# ipcs -s
4、显示所有的共享内存
# ipcs -m
5、显示IPC设施的详细信息
# ipcs -q -i id
id 对应shmid、semid、msgid等。-q对应设施的类型(队列),查看信号量详细情况使用-s,查看共享内存使用-m。
6、显示IPC设施的限制大小
# ipcs -m -l
-m对应设施类型,可选参数包括-q、-m、-s。
7、显示IPC设施的权限关系
# ipcs -c
# ipcs -m -c
# ipcs -q -c
# ipcs -s -c
8、显示最近访问过IPC设施的进程ID。
# ipcs -p
# ipcs -m -p
# ipcs -q -p
9、显示IPC设施的最后操作时间
# ipcs -t
# ipcs -q -t
# ipcs -m -t
# ipcs -s -t
10、显示IPC设施的当前状态
# ipcs -u
Linux上的ipcs命令,不支持UNIX上的-b、-o指令,同样UNIX中不支持-l、-u指令,所以在编写跨平台的脚本时,需要注意这个问题。

 
 
 
 
 
 
 

linux进程间通信-XSI IPC的更多相关文章

  1. 进程间通信——XSI IPC之消息队列

    进程间通信XSI IPC有3种:消息队列.共享内存.信号量.它们之间有很多相似之处,但也有各自的特殊的地方.消息队列作为其中比较简单的一种,它会有些什么东西呢,来一起探讨探讨.. 消息队列结构 消息队 ...

  2. 20155301 滕树晨linux基础——linux进程间通信(IPC)机制总结

    20155301 滕树晨linux基础--linux进程间通信(IPC)机制总结 共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在 ...

  3. 20155332 linux进程间通信(IPC)机制(未完成,待续)

    linux进程间通信(IPC)机制 1.共享内存 共享内存是在多个进程之间共享内存区域的一种进程间的通信方式,由IPC为进程创建的一个特殊地址范围,它将出现在该进程的地址空间(这里的地址空间具体是哪个 ...

  4. Linux进程间通信(IPC)之信号量

    [Linux]进程间通信(IPC)之信号量详解与测试用例 2017年03月22日 17:28:50 阅读数:2255 学习环境centos6.5 Linux内核2.6 进程间通信概述 1. 进程通信机 ...

  5. Linux进程间通信:IPC对象——信号灯集详解

    作者:倪老师,华清远见嵌入式学院讲师. 一.信号灯概述 信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制.相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时 ...

  6. 解Linux进程间通信(IPC)方式

    http://blog.csdn.net/liuhongxiangm/article/details/7928790 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对U ...

  7. [进程通信] Linux进程间通信(IPC)

    简介 linux下进程间通信的几种主要手段: 1.      管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道 ...

  8. 深刻理解Linux进程间通信(IPC)

    https://www.ibm.com/developerworks/cn/linux/l-ipc/ linux下进程间通信的几种主要手段简介: 管道(Pipe)及有名管道(named pipe):管 ...

  9. Linux进程间通信(IPC)

    linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间 ...

随机推荐

  1. C#开源资源项目

    一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖配置文件的方式.这种部署方面(as ...

  2. 重新想象 Windows 8 Store Apps (61) - 通信: http, oauth

    [源码下载] 重新想象 Windows 8 Store Apps (61) - 通信: http, oauth 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通信 ...

  3. 百度地图API自定义地图

    http://api.map.baidu.com/lbsapi/creatmap/index.html http://developer.baidu.com/map/index.php?title=w ...

  4. JPA学习(2)注解

    上一篇学习了JPA的helloworld,也初略的使用了一些注解,接下来就细细的了解一下有哪些注解,和这些注解的作用 JPA的基本注解: ①@Entity,@Table,@Id,@GeneratedV ...

  5. FL2440驱动添加(2): RTC(Real time clock)

    一,Linux下的时间分为两种,系统时间与硬件时间(RTC芯片): 1,系统时间就是运行系统能够直接看到的时间: 2,硬件时间就是RTC芯片中的时间,断电任然有电池供电: linux系统开机时,会从R ...

  6. js 自带的 filter()方法

    1. 方法概述 它用于把Array的某些元素过滤掉,然后返回剩下的元素组成的数组. 2. 例子 2.1 尝试用filter()筛选出素数: 'use strict'; function get_pri ...

  7. PHP KMP算法实现

    function getNext( $str ){ $ret = array(0=>0); for( $j =1; $j < strlen($str); $j++ ){ $_s = sub ...

  8. C#进制转换

    //十进制转二进制 Console.WriteLine(Convert.ToString(69, 2)); //十进制转八进制 Console.WriteLine(Convert.ToString(6 ...

  9. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q57-Q59)

    Question 57You update a solution validator.You need to ensure that all SharePoint solutions are vali ...

  10. ubuntu下nagios配置

    参考文献: http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html http://my.oschina.net/duangr/blo ...