我需要将标准输出转发到不同的文件,以分离产生的某些打印并将其恢复为正常的标准输出。

我使用freopen以这种方式切换到文件:

char name[80];
memset(name, 0, 80);
strcpy(name, "./scripts/asm/");
strcat(name, m_func->m_name->m_value);
strcat(name, ".shasm");
freopen(name, "w", stdout);

它确实有效,但是在过程结束时(请注意,stdout以以前的相同方式被多次重定向),我无法将其还原为原始的stdout。我尝试了以下方法:
freopen("/dev/stdout", "w", stdout);

但它似乎不起作用..仅用于我在macosx上开发的信息。

我应该怎么办?

提前致谢

最佳答案

这可以使用fileno,dup和dup2调用来实现。我已经在linux上尝试过此操作,不确定是否可以在mac上运行,但是我确定您会获得一些等效的设置功能。查看此示例代码是否适合您。抱歉,代码中没有错误处理。 :)

    #include <stdio.h>

    main()
    {
        int    fd;
        fpos_t pos;

        printf("stdout, ");

        fflush(stdout);
        fgetpos(stdout, &pos);
        fd = dup(fileno(stdout));
        freopen("stdout.out", "w", stdout);

        f();

        fflush(stdout);
        dup2(fd, fileno(stdout));
        close(fd);
        clearerr(stdout);
        fsetpos(stdout, &pos);        /* for C9X */

        printf("stdout again\n");
    }

    f()
    {
    printf("stdout in f()");
    }

关于c++ - freopen : reverting back to original stream,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1673764/

10-12 01:33