如何在c ++中创建管道

时间:2011-04-30 06:44:56

标签: c++ pipe pseudocode

我正在查看c ++程序的代码,该程序将文件的内容管道更多。我不太明白它,所以我想知道是否有人可以为一个c ++程序编写伪代码来管理其他东西?为什么有必要使用fork?

3 个答案:

答案 0 :(得分:6)

create pipe
fork process
if child:
  connect pipe to stdin
  exec more
write to pipe

您需要fork(),以便在调用之前替换孩子的stdin,这样您就不必在继续之前等待该过程。

答案 1 :(得分:2)

您将准确找到答案here

答案 2 :(得分:2)

  

为什么有必要使用fork?

从shell运行管道时,例如

$ ls | more

会发生什么? shell运行两个进程(一个用于ls,一个用于more)。此外,ls的输出(STDOUT)通过管道连接到more的输入(STDIN)。

请注意,lsmore不需要知道任何有关管道的信息,它们只是分别写入(和读取)它们的STDOUT(和STDIN)。此外,因为它们可能会执行正常的阻塞读写操作,所以它们可以同时运行。否则ls可以填充管道缓冲区并在more有机会消耗任何东西之前永久阻止。

  

......把东西送到其他东西......

另请注意,除了并发参数之外,如果其他是另一个程序(如more),则必须在另一个进程中运行。您可以使用fork创建此流程。如果您只是在当前进程中运行more(使用exec),它将替换您的程序。


一般情况下,可以使用不带fork的管道,但您只需在自己的流程中进行通信。这意味着您要么进行非阻塞操作(可能在同步协同例程设置中),要么使用多个线程。