将printf重定向到两个流

Gui*_*ari 3 c

我延长,打印所有信息到现有的C项目stdoutprintf.我想将此信息打印到stdout和日志文件.

如果我是原始项目的贡献者,我会printf用我的自定义日志功能替换所有调用.唉,我不是,所以这是我的问题:

是否可以重定向printf以便单个调用同时打印stdout到文件?

我知道这是一个很长的镜头但是,如果可能的话,我可以获得我想要的东西,而无需修改原始代码.

编辑:感谢您对该tee命令的回答和评论.但是,我正在寻找一种直接在C代码中以自动方式进行操作的方法,这样用户就不必费心使用tee了.

感谢您的关注!

Fil*_*ves 7

你正在寻找tee命令:

./prog | tee file
Run Code Online (Sandbox Code Playgroud)

这将显示./progin 的输出,stdout它也将存储它file.想想tee作为管道中的三通夹具:)

UPDATE

如果你不想强迫用户考虑使用tee,我只会制作一个shell脚本,它完全按照我上面的说明 - 用 - 调用程序tee- 并让用户只与脚本交互.

如果这对您不起作用,并且您真的想要更改源代码,我看不到任何即时的简单解决方案.您可以编写一个printf()写入两个流的包装器,但是您必须继续将每个调用替换printf()为您的包装器.

  • @GuidoWalterPettinari `tee()` 系统调用怎么样?可以在 C 中使用它,对吗?http://linux.die.net/man/2/tee (2认同)
  • @RickyMutschlechner`tee(2)`的问题在于它是一次性操作,即调用`tee(2)`并不意味着"总是重复输出".你必须迭代地调用它(参见联机帮助页上的示例) (2认同)