Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我可以同时写入两个不同的文件指针吗?_C_File_Unix_Io - Fatal编程技术网

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); }