我怎样才能指导" cout"," cerr"," stdout"和" stderr"从C ++程序到单个文件

时间:2018-05-17 17:50:12

标签: c++ stdout cout stderr

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

然而,该服务使用另一个" C"组件执行一些遗留操作。 C组件使用" fprintf(stdout,xxx)"和" fprintf(stderr,xxx)"打印日志。

这些消息没有被打印到" cout"和" cerr"日志文件。相反,它会在提示中打印出来。我们需要那些stdout / stderr消息也转到相应的childlog文件。

有没有办法可以绑定" stdout"和" stderr"也在同一个文件中" cout"和" cerr"受到约束。

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

让我知道。

由于

1 个答案:

答案 0 :(得分:0)

默认情况下,std::cin / std::cout / std::cerr / std::clog分别与stdinstdoutstderr相关联。正确的做法是重定向C层,C ++层将照顾自己。

如果您使用POSIX系统,只需使用dup2()系统调用重定向fd的0(stdin),1(stdout)和2({{1} })你选择的文件。