0

我想将一个流写入一个 FILE *fp,同时该流也应该被复制到另一个 fp 是否有更好的方法通过消除一个 fprintf 来编写我的调试函数?

const int logflag=1;
#define debug(args ...) if (logflag) { FILE *flog = fopen("test.log", "a+"); fprintf( flog, args); fclose(flog); } fprintf(stderr, args); 

int main()
{

    debug("test"); // writes test into both stderr and flog 
    debug("test2");
}
4

1 回答 1

1

简短的回答是否定的,它是两个不同的文件指针,您一次只能写入一个。实际上,dup仍然对您没有帮助,因为它关闭了重复的文件描述符:

"dup2() makes newfd be the copy of oldfd, closing newfd first if necessary"

from the dup2 man-pages

但是,如果您的目标是同时将日志记录到屏幕和文件中,那么最好使用 Linux 已经为您提供的工具。一个普遍的好习惯(我不记得它的来源)是让程序打印其输出并调试到stdout/stderr并让调用用户确定如何处理输出。

在此之后,如果您的所有输出都转到stderr,您可以在执行程序时执行以下操作:

$ ./program 2>&1 | tee file.log
于 2013-01-24T22:31:52.803 回答