fprintf to file和stdout

时间:2014-12-16 12:54:06

标签: c stdout

我的C程序预计会产生大量输出。

其中一些输出行很特殊,我想将副本写入特殊文件。我最终做了

FILE * outf = fopen("special_file", "a");
fprintf(stdout, "normal line 1\n");
fprintf(stdout, "special line!\n");
fprintf(outf,   "special line!\n");/*inelegant & dangerous code duplication*/
fprintf(stdout, "normal line 2\n");

是否有一种简单的方法可以避免这种不优雅的危险的代码重复?我有很多这样的东西,我最终可能写出像printf("next is %d\n", num++);这样的东西,这些东西不能天真地重复,例如使用宏。

目前我认为没有任何解决方案可以产生一个运行tee等效的子进程。还有其他想法吗?例如。可以定义一种FILE*,它会以某种方式重定向到stdout& outf

1 个答案:

答案 0 :(得分:2)

我认为dup(2)系统调用是您所需要的,请参阅“man 2 dup”。

编辑:感谢投票,但我认为我弄错了。

dup的作用是使两个文件描述符引用一个文件。你想要的是一个引用两个文件的单个文件描述符对象。这是完全不同的事情。