在写入文件和标准输出之间切换

时间:2011-08-29 09:03:51

标签: c cross-platform printf stdout iostream

我想在写入文件和stdout之间切换 我无法使用fprintf,但只能使用printffreopen 像这样的东西:

for(size_t i;i<100;++i)
{
     if(i%2)
     {
        freopen("tmp","w",stdout);
        printf("%d\n",i);
     }
     else
     {
        //return to write to stdout?
        printf("%d\n",i);
     }
}

如何返回写入stdout

更新

我编写跨平台应用程序,dup无法使用。

2 个答案:

答案 0 :(得分:2)

永远不要使用freopen。它无法达到你想要的效果,而且它是一个非常危险的功能。如果失败,您可以做的唯一安全的事情是立即终止程序或确保永远不再访问stdout

有一种方法可以在dupdup2的POSIX系统上执行您想要的操作。它看起来像这样:

fflush(stdout);
int old_stdout = dup(1);
int new_stdout = open("whatever", O_WRDONLY|O_CREAT, 0666);
dup2(new_stdout, 1);
close(new_stdout);
/* use new stdout here */
fflush(stdout);
dup2(old_stdout, 1);
close(old_stdout);

答案 1 :(得分:0)

您需要dup文件描述符,然后重新打开打开的描述符。你为什么不能使用fprintf? (这是家庭作业吗?)