c++ - 在 C 中制作一个基本的 shell 并且在管道/ fork 方面遇到麻烦

标签 c++ c unix fork pipe

首先我想问一下为什么管道需要 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/

相关文章:

c - 显示 printf() 的永久表\列表

c - 为什么C语言中没有split函数?

linux - Linux 中的高值变量

linux - HAProxy 降低吞吐量

c - DUP 和 DUP2 程序。我不明白它是如何工作的

c - 为什么 printf ("%s\n", "123456789"+ 3);//输出 : "456789"

c++ - omp_get_thread_num() 返回有问题的数字?

c++ - 使用嵌套结构是否相关?

c++ - 如何创建自定义的shared_ptr?

c++ - c++中的异常机制问题