一 什么是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指令,所以在编写跨平台的脚本时,需要注意这个问题。

转载于:https://www.cnblogs.com/fangshenghui/p/4039784.html

linux进程间通信-XSI IPC相关推荐

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

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

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

    原 linux基础--linux进程间通信(IPC)机制总结 2016年07月23日 21:33:12 yexz 阅读数:18224更多 <div class="tags-box sp ...

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

    转自:http://www.ibm.com/developerworks/cn/linux/l-ipc/ 序 linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的.而对Unix发 ...

  4. linux进程间通信(IPC)

    1.进程通信概念 进程用户空间是相互独立的,一般而言是不能相互访问的.但很多情况下进程间需要互相通信,来完成系统的某项功能.进程通过与内核及其它进程之间的互相通信来协调它们的行为. 每个进程各自有不同 ...

  5. 【B站视频笔记】linux 进程间通信(ipc)信号(软中断信号)signal库函数、可靠信号和不可靠信号、信号集sigprocmask(信号掩码、信号递达Delivery、信号未决Pending)

    [视频教程]Linux信号详解(可靠信号.不可靠信号.阻塞信号.信号处理函数) [博文]Linux信号 文章目录 背景 课程笔记 一.如何让程序在后台运行 1.加"&"符号 ...

  6. 深入理解Linux进程间通信(IPC)-- 信号signal

    2. 信号(上) 2.1. 信号及信号来源 2.1.1 信号本质 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不 ...

  7. Linux ns 5. IPC Namespace 详解

    文章目录 1. 简介 2. 源码分析 2.1 copy_ipcs() 2.2 ipcget() 2.3 ipc_check_perms() 2.4 相关系统调用 参考文档: 1. 简介 进程间通讯的机 ...

  8. Linux 进程间通信

    引言 进程通信的目的: 数据传输 一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几M字节之间 共享数据 多个进程想要操作共享数据,一个进程对共享数据 通知事 一个进程需要向另一个或一 ...

  9. [【转载】 linux进程间通信方式

    目录 目录 进程通信的目的 Linux 进程间通信(IPC)的发展 linux使用的进程间通信方式 管道( pipe ) 信号量( semophore ) 消息队列( message queue ) ...

最新文章

  1. 分享几个 SpringBoot 实用的小技巧
  2. 时间序列相关算法与分析步骤
  3. 实现Redis用户会话 - 2
  4. 新体验小说:作家重新卷入当代历史的一种方式——纪念“新体验小说”倡导一周...
  5. JS 学习笔记--11---内置对象(Global/Math)
  6. python的应用领域和常用函数模块有哪些_Python模块导入区别与常用函数案例
  7. 网友调侃特斯拉股价要冲向火星 马斯克:疯狂的时代
  8. Linux内核深入理解系统调用(2):vsyscall 和 vDSO 以及程序是如何运行的(execve)
  9. 力扣225. 用队列实现栈(JavaScript)
  10. 文件系统04 - 零基础入门学习Delphi37
  11. 为什么大公司一定要使用 DevOps?
  12. matlabapp窗口图像_Matlab在一个图形窗口里画多个图形的操作教程
  13. [Java] Appfuse tapestry 小记
  14. 关于Eclipse在servlet中连接数据库时出现驱动加载失败的解决
  15. 如何修改网卡的MAC地址?
  16. 解决Ubuntu16.04软件商店无法加载
  17. 常见漏洞之 struts2+ jboss
  18. Java选择与循环语句
  19. angular2 (v2.0)
  20. 第9.8节 Python使用writelines函数写入文件内容

热门文章

  1. mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引
  2. Go 知识点(19)— Go 语言中的野指针
  3. 深度学习学习指南-工具篇
  4. Win10系统如何在防火墙里开放端口
  5. colab找不到模块 no name
  6. 自动驾驶传感器比较:激光雷达(LiDAR) vs. 雷达(RADAR)
  7. MindInsight训练可视整体设计介绍
  8. CUDA Pro:通过向量化内存访问提高性能
  9. centos7下没有iptables进行安装或更新
  10. 在React Hook里使用history.push跳转