进程间的通信(InterProcess Communication,IPC),在不同进程间传播或交换信息。因为进程用户空间是相互独立的,但可以共享内存区,内核可以提供共享内存区的条件。除此之外,就是双方都可以访问的外设了。
进程间的通信方法:1.管道(命名管道和无名管道)
2.消息队列,共享内存,信号量 称为系统(POSIX 和System)IPC
3.套接口(用于远程进程间通信)
管道(Pipe)pipe:也称匿名管道,是Linux下最常见的通信方式,是在两个进程之间实现一个数据流通的通道。
特点:· 管道没有名字,也称匿名管道
· 管道是半双工的,数据只能从一个方向流动。需要双方通信是要建立两个管道
· 只能用于父进程或者兄弟进程之间
· 单独都成一种独立的文件系统
· 数据的读出和写入:一个进程向管道中写的内容被管道另一端进程读出。写入的内容每次都添加在管道缓冲区末尾,并且每次都是从缓冲区头部读出数据
· 管道缓冲区是有限的
· 管道传递的是无格式字节流
命名管道(FIFO)mkfifo:提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中。只要进程能够访问该路径,就能通信。
特点: · 命名管道可以用于任何两个进程之间的通信
· 命名管道作为一个特殊的文件存放于文件系统中,而不是像管道一样存放在内存中