📜  IPC 技术 PIPES

📅  最后修改于: 2022-05-13 01:56:11.527000             🧑  作者: Mango

IPC 技术 PIPES

管道是一种用于进程间通信的技术。管道是一种机制,通过该机制将一个进程的输出定向到另一个进程的输入。因此,它提供了两个相关进程之间的数据流的一种方式。

尽管可以像普通文件一样访问管道,但系统实际上将其作为FIFO 队列进行管理。管道文件是使用管道系统调用创建的。管道具有输入端和输出端。可以从输入端写入管道并从输出端读取。管道描述符有一个数组,其中存储了两个指针,一个指针指向其输入端,另一个指针指向其输出端。

假设两个进程,进程 A 和进程 B,需要通信。在这种情况下,重要的是写入的进程关闭管道的读取端,读取的进程关闭管道的写入端。本质上,对于从进程 A 到进程 B 的通信,应该发生以下情况。

  • 进程 A 应该保持其写端打开并关闭管道的读端。
  • 进程 B 应该保持它的读端打开并关闭它的写端。创建管道时,它会以字节为单位给出固定大小。

当进程尝试写入管道时,如果管道未满,则立即执行写入请求。
但是,如果管道已满,则进程将被阻塞,直到管道状态发生变化。类似地,如果读取进程尝试读取当前在管道中的更多字节,则会阻塞读取进程,否则执行读取进程。一次只有一个进程可以访问一个管道。

限制

  • 作为通信渠道,管道仅在一个方向上运行。
  • 管道不能支持广播,即同时向多个进程发送消息。
  • 管道的读取端以任何方式读取。哪个进程连接到管道的写端并不重要。因此,这是非常不安全的通信方式。
  • 需要一些管道(末端闭合)来创建正确定向的管道。