我的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
?
答案 0 :(得分:2)
我认为dup(2)系统调用是您所需要的,请参阅“man 2 dup”。
编辑:感谢投票,但我认为我弄错了。
dup的作用是使两个文件描述符引用一个文件。你想要的是一个引用两个文件的单个文件描述符对象。这是完全不同的事情。