我想将一个流写入一个 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");
}
最佳答案
简短的回答是否定的,它是两个不同的文件指针,您一次只能写入一个。实际上,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
关于c - 是否有一个 API(如 dup)来复制 fstream,以便它可以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14511484/