freopen标准输出和控制台

鉴于以下function:

freopen("file.txt","w",stdout); 

将stdoutredirect到一个文件中,我如何使stdoutredirect到控制台?

我会注意到,是的,还有类似的其他问题, 他们是关于Linux / POSIX。 我正在使用Windows。

你不能分配给标准输出,这将依赖于它的一组解决scheme无效。 dup和dup2()不是原生的窗口,取消其他集合。 如上所述,posix函数不适用(除非你计算fdopen())。

你应该可以使用_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); } 

另一种解决方案是:

 freopen("CON","w",stdout); 

每个维基百科 “CON”是一个特殊的关键字,指的是控制台。

发布答案后,我注意到这是一个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; }