prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 12.36b

如何安排同时将输出发送到两个地方,例如发送到屏幕和文件?


你不能直接做到这一点,但你可以编写自己的printf变体,它会打印两次。这是一个示例logprintf函数,它会打印到两者stdout和预先打开的日志文件

#include <stdio.h>
#include <stdarg.h>

extern FILE *logfp;

void logprintf(char *fmt, ...)
{
	va_list argp;
	va_start(argp, fmt);
	vfprintf(stdout, fmt, argp);
	va_end(argp);
	va_start(argp, fmt);
	vfprintf(logfp, fmt, argp);
	va_end(argp);
}
现在,每当你调用logprintf(你可以像使用格式字符串一样调用它printf),它会同时打印到stdoutlogfp,你可能已经将其打开到所需的日志文件。安排此事的另一种方法是
void f2printf(FILE *fp1, FILE *fp2, char *fmt, ...)
{
	va_list argp;
	va_start(argp, fmt); vfprintf(fp1, fmt, argp); va_end(argp);
	va_start(argp, fmt); vfprintf(fp2, fmt, argp); va_end(argp);
}
其中f2printf就像fprintf一样,除了它接受两个文件指针(例如stdoutlogfp),它会同时打印到两者。

这两种技术显然都需要你显式调用logprintff2printf。在标准 C 中,没有已知的方法可以隐式(即通过类似于freopen的调用)安排一个流,你通过正常的调用(例如fprintf)打印一次,同时打印到两个地方。[脚注]

另请参阅问题 15.5


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管