【发布时间】: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。 :)