- 什么是进程间通信?
进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是不能互相访问的,唯一的例外是共享内存区。另外,系统空间是“公共场所”,各进程均可以访问,所以内核也可以提供这样的条件。此外,还有双方都可以访问的外设。在这个意义上,两个进程当然也可以通过磁盘上的普通文件交换信息,或者通过“注册表”或其它数据库中的某些表项和记录交换信息。广义上这也是进程间通信的手段,但是一般都不把这算作“进程间通信”。(来自百度百科)
注:因此在用户空间实现进程通信是不可能的,通过Linux内核通信
2. 有哪几种通信方式?
管道通信:无名管道、有名管道(文件系统中有名)
信号通信:信号(通知)通信包括:信号的发送、信号的接收和信号的处理。
IPC(Inter-Process Communication)通信:共享内存、消息队列和信号灯。
以上是单机模式下的进程通信(只有一个Linux内核)
Socket通信:存在于一个网络中两个进程之间的通信(两个Linux内核)。
3. 学习思路
进程通信的学习思路:每一种通信方式都是基于文件IO的思想。
open:功能:创建或打开进程通信对象。函数形式不一样,有的是有多个函数完成。
write: 功能:向进程通信对象中写入内容。函数形式不一样。
read: 功能:从进程通信对象中读取内容。函数形式不一样。
close: 功能:关闭或删除进程通信对象。形式不一样。
上面图片是文件I/O读写函数和IPC(Inter-Process Communication)通信:共享内存、消息队列和信号灯相关函数的对比。具体可使用linux下man命令查看具体形式比如(man read,man shmget)。如下图:
通过man命令查看这些函数的具体形式和参数,即可了解并使用。