freopen stdout和控制台

SSi*_*ht3 7 c windows stdout

鉴于以下功能:

freopen("file.txt","w",stdout);
Run Code Online (Sandbox Code Playgroud)

将stdout重定向到一个文件,如何将它重新定向到控制台?

我会注意到,是的还有其他类似的问题,它们是关于linux/posix的.我正在使用Windows.

您无法分配给stdout,这会使依赖它的一组解决方案无效.dup和dup2()不是Windows的原生,使另一组无效.如上所述,posix函数不适用(除非你计算fdopen()).

Has*_*kun 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);
}
Run Code Online (Sandbox Code Playgroud)


小智 15

另一种解决方案是:

freopen("CON","w",stdout);
Run Code Online (Sandbox Code Playgroud)

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

  • 我测试了它,是的,它确实有效。这是我一直在寻找的解决方案。非常感谢您的帮助@dtyler (2认同)