如何将exec'ed程序的stdout重定向到FCGI_stdout?

时间:2013-01-16 16:32:51

标签: c git exec fastcgi

我正在构建一个基于libfcgi的fastcgi应用程序,以便在git中提供“智能HTTP”传输。为此,我目前需要fork和执行git-upload-pack程序。唯一的问题是libfcgi用特殊的FCGI文件描述符替换STDOUT和STDERR,而git不知道这些。我希望能够在父进程中捕获git程序(stdout& stderr)的输出,以便将其发送到服务器。

1 个答案:

答案 0 :(得分:1)

在调用fork()之后,在调用exec()之前,请执行以下操作:在fds 1和2(stdout和stderr)上调用close(),然后调用dup2()来分配STDOUT和STDERR的fds libfcgi new fds:1和2.然后你可以关闭STDOUT和STDERR的原始fds(它们只对exec'ed git程序关闭,但仍然会在你的主程序中打开)。

这应该将git的输出重新分配给libfcgi流。如果你想手动读取流并自己发送数据,你可以使用pipe()调用来创建一对fds,这样git可以写入一个,你可以从另一个读取。或者只是使用popen(),它可以为你做这个(但它不会让你使用stderr)