次のコード:
#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()");
}
stdoutを復元することはできません。なぜこれが当てはまるのか誰もが知っていますか?
[matt test] uname -r
3.4.6-2.fc17.x86_64