以下代码:
#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()");
}
可以很好地重定向stdout
然后放回去。但是,更改f()
为:
f()
{
wprintf(L"stdout in f()");
}
不允许恢复标准输出。有谁知道为什么会这样?
[matt test] uname -r
3.4.6-2.fc17.x86_64