我需要将标准输出转发到不同的文件,以分离产生的某些打印并将其恢复为正常的标准输出。
我使用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/