首先我想问一下为什么管道需要 fork ?我对此很陌生,但对我来说,我还不明白为什么我不能只在 | 的左侧运行一个进程。然后在使用结果作为输入后进行下一部分。我知道有人用过 fork ,但我不明白为什么或在哪里需要它们。
非常感谢您回答这个问题,尽管这可能是一个愚蠢的问题。
最佳答案
阅读Advanced Linux Programming & intro(2) ;它——ALP 书——有几章解释这一点。或许还可以研究一些自由软件 shell 的源代码。也可以使用 strace(1)
A pipe(7)具有一定(小)容量 PIPE_BUF
(几千字节)。当该管道被填满时,写入过程将被阻塞。当读取进程读取完所有内容时,管道变空,读取进程被阻塞。因此写入进程有机会在其中运行和写入。
因此您需要两个进程同时 运行(并且它们可以交换大量数据——例如几秒钟内交换千兆字节)。 fork
是创建新进程的唯一方式。
关于c++ - 在 C 中制作一个基本的 shell 并且在管道/ fork 方面遇到麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26025039/