【问题标题】:Using streams to pipe input/output between *nix processes使用流在 *nix 进程之间传递输入/输出
【发布时间】:2012-04-29 09:05:44
【问题描述】:

我正在使用 C 语言开发一个相当简单的应用程序。最终目标是在 *nix 环境中将一个进程的输出通过管道传输到另一个进程的输入(是的,我知道 pipe() 命令和 dup /dup2 但我正在尝试使用这些命令来解决问题)。我想知道是否有任何方法可以连接流而不是使用文件描述符(不能保证系统符合 POSIX)。

所以基本上我想做这样的事情(伪代码)

pid = fork()

if pid == 0 
    // assign this process's stdin to the parents stdout.
    stdin = parent.stdout;
    exec() // launch new process that receives the parents stdout as stdin
    // child stuff....
else
    // parent stuff....

我知道它可能不会像上面那样简单,但是有没有办法只使用流来做到这一点?我试着环顾四周,但找不到任何东西..

谢谢!

【问题讨论】:

  • 您将无法避免使用管道将一个进程的标准输出连接到另一个进程的标准输入(除非您将 Unix 域套接字作为替代方案)。
  • 真该死。好吧,我希望我可以偷懒。谢谢!
  • 只是出于兴趣, pipe() 或 dup/2 有什么问题?
  • 我在某处读到混合文件描述符和 FILE*s 不是最好的主意。我在应用程序的其他地方有一些代码在标准输入上使用 freopen() 来重定向输入,所以我最终可能会将其更改为使用 open 和 dup/dup2/pipe。 :)

标签: c linux stream exec fork


【解决方案1】:

很抱歉,如果我在这里遗漏了重点,但 *nix 的整个理念是一个程序,一份工作。如果您需要一个程序将程序的内容转储到屏幕上,那么您可以使用 cat 命令。如果文件太大并且您需要分页符,您可以将 cat 的输出通过管道传递给 more 命令:

cat myfile.txt |更多

如果您需要在两个终端应用程序之间进行管道传输,那么您应该使用命令行来执行此操作:

myprog1 | myprog2

显然这是哲学方法,所以如果这没有帮助,那么您能否澄清您正在尝试管道以及为什么要在过程中这样做?

【讨论】:

  • 对不起拉斯。我正在设计一个轻量级的终端。它的一项工作是运行其他工作;)
  • 啊哈,是的,这可以解释:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 2019-04-07
  • 2016-12-09
  • 1970-01-01
  • 2014-04-16
  • 2011-07-23
  • 2011-04-08
相关资源
最近更新 更多