我想在写入文件和stdout
之间切换
我无法使用fprintf
,但只能使用printf
和freopen
像这样的东西:
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
无法使用。
答案 0 :(得分:2)
永远不要使用freopen
。它无法达到你想要的效果,而且它是一个非常危险的功能。如果失败,您可以做的唯一安全的事情是立即终止程序或确保永远不再访问stdout
。
有一种方法可以在dup
和dup2
的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
? (这是家庭作业吗?)