0

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

4

1 回答 1

1

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

这应该将 git 的输出重新分配给 libfcgi 流。如果您想手动读取流并自己发送数据,您可以使用 pipe() 调用来创建一对 fd,以便 git 可以写入其中一个,而您可以从另一个读取。或者只使用可以为您执行此操作的 popen()(但它不会让您使用 stderr)

于 2013-01-16T20:09:49.247 回答