我想同时将一个流写入一个文件*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/