我需要将stdout转发到不同的文件,以分离生成的一些打印,并将其恢复为正常的stdout。
我使用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上开发。
我该怎么办?
提前感谢
发布于 2009-11-04 21:53:56
这可以使用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()");
}发布于 2009-11-04 21:35:29
这看起来像是解决你问题的一种间接的方法。为什么不直接用fopen()打开每个文件,然后用fputs、fprintf、fwrite等写到它的FILE *呢?不需要重定向stdout。
https://stackoverflow.com/questions/1673764
复制相似问题