给出以下功能:
freopen("file.txt","w",stdout);
将stdout重定向到一个文件中,如何将stdout重定向回控制台?
我会注意到,是的还有其他类似的问题, 但是 它们与linux / posix有关。我正在使用Windows。
您无法分配到stdout,这会使依赖它的一组解决方案无效。 dup和dup2()不是Windows的原生,使另一组无效。如上所述,posix函数不适用(除非你计算fdopen())。
答案 0 :(得分:17)
您应该可以使用_dup
来执行此操作
这样的事情应该有效(或者您可能更喜欢_dup
文档中列出的示例):
#include <io.h>
#include <stdio.h>
...
{
int stdout_dupfd;
FILE *temp_out;
/* duplicate stdout */
stdout_dupfd = _dup(1);
temp_out = fopen("file.txt", "w");
/* replace stdout with our output fd */
_dup2(_fileno(temp_out), 1);
/* output something... */
printf("Woot!\n");
/* flush output so it goes to our file */
fflush(stdout);
fclose(temp_out);
/* Now restore stdout */
_dup2(stdout_dupfd, 1);
_close(stdout_dupfd);
}
答案 1 :(得分:15)
答案 2 :(得分:2)
在发布答案后,我注意到这是一个特定于Windows的问题。以下问题仍然可能对其他人提出问题。 Windows还提供_fdopen,因此只需将0更改为正确的HANDLE就可以将此Linux解决方案修改为Windows。
stdout = fdopen(0, "w")
#include <stdio.h>
#include <stdlib.h>
int main()
{
freopen("file.txt","w",stdout);
printf("dupa1");
fclose(stdout);
stdout = fdopen(0, "w");
printf("dupa2");
return 0;
}