在写入文件和标准输出之间切换
我想在写入文件和写入 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
无法使用。
I want to switch between writing to the file and to the stdout
I can't use fprintf
, but only printf
and freopen
something like this:
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);
}
}
How can I return to writing to the stdout
?
Update
I write cross-platform application and dup
can't be used.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
切勿使用
freopen
。它无法实现你想要的功能,而且是一个非常危险的功能。如果失败,唯一安全的做法就是立即终止程序或确保不再访问stdout
。有一种方法可以使用
dup
和dup2
在 POSIX 系统上执行您想要的操作。它看起来像这样:Never use
freopen
. It cannot achieve what you want, and it's a very dangerous function. If it fails, the only safe thing you can do is immediately terminate the program or ensure thatstdout
is never accessed again.There is a way to do what you want on POSIX systems with
dup
anddup2
. It looks something like this:您需要复制文件描述符,然后重新打开打开的描述符。为什么不能使用
fprintf
? (这是作业吗?)You need to
dup
the file descriptors, and reopen to the open descriptor. Why can't you usefprintf
? (Is this homework?)