我有一个程序,想要在文本文件中将某些输出复制到stdout进行缓存。看起来像这样:
FILE* cache;
// Open file, check for errors, etc.
fprintf(stdout, "My data\n");
fprintf(cache, "My data\n");
for (int i = 0; i < 10; ++i)
{
fprintf(stdtout, "%d ", i);
fprintf(cache, "%d ", i);
}
是否有某种方法可以获取FILE *
,如果我在其中写入,则可以同时在stdout
和缓存文件中得到输出?
(仅在外壳中重定向它是行不通的;程序需要确定它,而不是调用者。)
答案 0 :(得分:2)
FILE
对象仅与一个文件相关联,因此您不能写入一个FILE
,而不能将其写入两个物理文件。
但是,您可以做的是在fprintf
周围创建一个包装,该包装需要两个FILE *
并在那里进行复制。
void dup_fprintf(FILE *f1, FILE *f2, const char *format, ...)
{
va_list args1;
va_start(args1, format);
vfprintf(f1, format, args1);
va_end(args1);
va_list args2;
va_start(args2, format);
vfprintf(f2, format, args2);
va_end(args2);
}
然后您可以执行以下操作:
dup_fprintf(stdout, cache, "My data\n");
for (int i = 0; i < 10; ++i)
{
dup_fprintf(stdtout, cache, "%d ", i);
}