我们有一个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"受到约束。
有类似的问题,但没有多个语言代码混合示例。
让我知道。
由于
答案 0 :(得分:0)
默认情况下,std::cin
/ std::cout
/ std::cerr
/ std::clog
分别与stdin
,stdout
和stderr
相关联。正确的做法是重定向C层,C ++层将照顾自己。
如果您使用POSIX系统,只需使用dup2()
系统调用重定向fd的0(stdin
),1(stdout
)和2({{1} })你选择的文件。