c - 如何将执行程序的标准输出重定向到 FCGI_stdout?

标签 c git exec fastcgi

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

最佳答案

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

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

关于c - 如何将执行程序的标准输出重定向到 FCGI_stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14363150/

相关文章:

git - 来自其他人的更改显示为未在 git pull 之后提交的更改

pipe - 使用 scanf 从管道读取失败

c - TCP 客户端无法将字符串发送到服务器

c - 如何使用阅读链接

git 分支实践

security - 保护可执行文件不被修补

bash - 执行另一个二进制文件时如何实现 bash EXIT 陷阱?

C 初学者 : How to search for particular words in a file (line by line) in C

在以下代码中找不到一个字节的内存泄漏

javascript - 用于版本控制和缩小 javascript 的 Maven 插件