我如何将“cout”、“cerr”、“stdout”和“stderr”从 C++ 程序定向到单个文件

Lij*_*hew 5 c++ cout stdout stderr

我们有一个 C++ Web 服务,它会根据每个请求生成子进程。因此,每个孩子都会创建自己的日志文件。我们将 cout 和 cerr 流绑定到一个文件以捕获所有“std::cout”和“std::cerr”。

但是,该服务使用另一个“C”组件来执行一些旧操作。C组件使用“fprintf(stdout,xxx)”和“fprintf(stderr,xxx)”来打印日志。

这些消息不会打印到“cout”和“cerr”日志文件中。相反,它会打印在提示中。我们需要这些 stdout/stderr 消息也转到相应的子日志文件。

有没有一种方法可以将“stdout”和“stderr”也绑定到绑定“cout”和“cerr”的同一文件。

有类似的问题,但没有多语言代码混合示例。

让我知道。

谢谢

Ste*_*ebb 2

默认情况下,// std::cin/分别与、和绑定。正确的做法是重定向 C 层,C++ 层将自行处理。std::coutstd::cerrstd::clogstdinstdoutstderr

如果您使用的是 POSIX 系统,只需使用dup2()系统调用将 fd 的 0 ( stdin)、1 ( stdout) 和 2 ( stderr) 重定向到您选择的文件。