C 我可以同时写入两个不同的文件指针吗?
我有一个程序,我想将一些输出复制到文本文件中的标准输出以进行缓存。它看起来像这样:C 我可以同时写入两个不同的文件指针吗?,c,file,unix,io,C,File,Unix,Io,我有一个程序,我想将一些输出复制到文本文件中的标准输出以进行缓存。它看起来像这样: 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* 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);
}
文件*缓存;
//打开文件,检查错误等。
fprintf(stdout,“我的数据”);
fprintf(缓存,“我的数据”);
对于(int i=0;i<10;++i)
{
fprintf(stdtout,“%d”,i);
fprintf(缓存“%d”,i);
}
有什么方法可以获取文件*
吗?如果我对它进行写入,我会在stdout
和缓存文件中获得输出
(仅仅在shell中重定向它是不起作用的;程序需要决定这一点,而不是调用方。)一个
文件对象仅与一个文件关联,因此您不能写入一个文件并让它写入两个物理文件
但是,您可以做的是在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);
}
dup_fprintf(标准输出,缓存,“我的数据”);
对于(int i=0;i<10;++i)
{
dup_fprintf(stdtout,缓存,“%d”,i);
}
一个文件
对象仅与一个文件关联,因此您不能写入一个文件
,而让它写入两个物理文件
但是,您可以做的是在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);
}
dup_fprintf(标准输出,缓存,“我的数据”);
对于(int i=0;i<10;++i)
{
dup_fprintf(stdtout,缓存,“%d”,i);
}