【发布时间】:2012-08-01 14:18:13
【问题描述】:
以下code:
#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
【问题讨论】:
-
fwide是否与此处相关? -
感谢您的指点,将查看它。
-
也许在存储的文件描述符上尝试
fdopen。 -
实际上,你为什么要搞乱文件描述符呢?你可以用
fopen和freopen做任何事情,最后只需要fdopen一次就可以恢复原始输出。 -
即使您以
./main > blah.log运行可执行文件会怎样。你能保证stdout会被放回blah.log
标签: c stdout io-redirection