IPC 技术 PIPES
管道是一种用于进程间通信的技术。管道是一种机制,通过该机制将一个进程的输出定向到另一个进程的输入。因此,它提供了两个相关进程之间的数据流的一种方式。
尽管可以像普通文件一样访问管道,但系统实际上将其作为FIFO 队列进行管理。管道文件是使用管道系统调用创建的。管道具有输入端和输出端。可以从输入端写入管道并从输出端读取。管道描述符有一个数组,其中存储了两个指针,一个指针指向其输入端,另一个指针指向其输出端。
假设两个进程,进程 A 和进程 B,需要通信。在这种情况下,重要的是写入的进程关闭管道的读取端,读取的进程关闭管道的写入端。本质上,对于从进程 A 到进程 B 的通信,应该发生以下情况。
- 进程 A 应该保持其写端打开并关闭管道的读端。
- 进程 B 应该保持它的读端打开并关闭它的写端。创建管道时,它会以字节为单位给出固定大小。
当进程尝试写入管道时,如果管道未满,则立即执行写入请求。
但是,如果管道已满,则进程将被阻塞,直到管道状态发生变化。类似地,如果读取进程尝试读取当前在管道中的更多字节,则会阻塞读取进程,否则执行读取进程。一次只有一个进程可以访问一个管道。
限制:
- 作为通信渠道,管道仅在一个方向上运行。
- 管道不能支持广播,即同时向多个进程发送消息。
- 管道的读取端以任何方式读取。哪个进程连接到管道的写端并不重要。因此,这是非常不安全的通信方式。
- 需要一些管道(末端闭合)来创建正确定向的管道。