【问题标题】:How to make a pipe in c++如何在 C++ 中制作管道
【发布时间】:2011-08-15 22:56:04
【问题描述】:

我正在查看一个 c++ 程序的代码,该程序将文件的内容通过管道传输到更多文件。我不太明白,所以我想知道是否有人可以为 c++ 程序编写伪代码,将某些东西传递给其他东西?为什么一定要用fork?

【问题讨论】:

  • 您必须使用 fork,因为管道是一种并行化程序的形式,如果您不使用 fork,它将无法正常工作。

标签: c++ pipe pseudocode


【解决方案1】:
create pipe
fork process
if child:
  connect pipe to stdin
  exec more
write to pipe

你需要fork(),这样你就可以在调用之前替换孩子的stdin,这样你就不用等待进程再继续。

【讨论】:

    【解决方案2】:

    你会准确找到答案here

    【讨论】:

    • 虽然理论上可以回答这个问题,it would be preferable 在这里包含答案的基本部分,并提供链接以供参考。
    【解决方案3】:

    为什么要使用fork?

    当您从 shell 运行管道时,例如。

    $ ls | more
    

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

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

    ...通过管道将某些东西传递给其他东西...

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


    一般来说,您可以使用没有fork 的管道,但您只是在自己的进程中进行通信。这意味着您要么执行非阻塞操作(可能在同步协同程序设置中),要么使用多个线程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多