在之前的博客中讲过,虚拟空间出现的其中一个目的就是解决 进程没有独立性,可能访问同一块物理内存 的问题。因为这种独立性,进程之间无法直接进行通信,操作系统为了解决这种问题,提出了多种适用于不同情境下的通信方式:
- 数据传输:管道、消息队列
- 数据共享:共享内存
- 进程控制:信号量
管道
管道的本质其实就是内核中的一块缓冲区,多个进程通过访问同一个缓冲区就可以实现进程间的通信。自 Linux 2.6.11
内核起,管道容量的大小默认是 65536
字节,但可以通过 fcntl函数
来修改管道容量。
管道分为两种:匿名管道、命名管道
匿名管道 pipe
因为没有具体的文件描述符,所以只能用于具有亲缘(父子)关系的进程之间的通信。
原理