介绍:
*管道是将一个过程的标准输出连接到另一个过程的标准输入的方法。
*管道是最古老的IPC机制之一。
*它们提供了过程之间的一种通信方式。
*因此,它们是半双工的。
我们在shell脚本中使用了管道
例如: ls | 分类 | lp
在上面的示例中,数据沿一个方向流动。即来自“ls”作为输入给“sort” and output of 分类作为输入给“lp”。因此,数据在一个方向上从左到右传播。因此半双工。
当一个进程创建一个管道时,有两个文件描述符。一个描述符用于将输入输入到管道(写入),而另一个描述符用于从管道获取数据(读取)。
此过程可以直观地表示如下:
您可能会想,如果流程与其自身进行通信,那么实际用途是什么?
从上面的示例中,我们可以看到管道已连接到流程本身。传输的数据将从内核移回到过程。但实际上,执行上述逻辑没有任何意义。因为管道要自言自语。
因此,我们派生一个子进程。由于所有子进程都将继承任何打开的“fd”从父级开始,我们现在有2个进程相互通信。现在,我们有了多进程通信的基础。
可以用图形表示,如下所示:
要将数据发送到管道,我们使用“write()””系统调用。要从管道返回数据,我们使用“read()” system call.
注意:
打开fd [0]进行读取
fd [1]用于编写。
该网站上可用的教程列表:
C编程20+章 | C ++编程80+章 |
100多个编码问题 | 数据结构和算法85+章 |
系统设计20+章 | Shell脚本编写12章 |
4g LTE 60+章节 | 最常见的编码问题 |
5G NR 50+章 | Linux系统编程20+章 |