C stdout重定向因wprintf()而失败

C stdout重定向因wprintf()而失败,c,stdout,io-redirection,C,Stdout,Io Redirection,以下是: 将不允许恢复标准输出。有人知道为什么会这样吗 [matt test] uname -r 3.4.6-2.fc17.x86_64 问题是由于标准输出的方向。 在调用wprintf()之前,使用mode=0调用fwide(),并检查它是否返回+ve值。如果确实如此,则可以安全地使用wprintf()。 使用完wprintf()后,关闭stdout并重新打开它以再次使用普通printf()。 或者,在现有标准输出上继续使用wprintf()和宽字符函数。 一旦标准输出有一个方向(字节或宽度

以下是:

将不允许恢复标准输出。有人知道为什么会这样吗

[matt test] uname -r
3.4.6-2.fc17.x86_64

问题是由于标准输出的方向。 在调用wprintf()之前,使用mode=0调用fwide(),并检查它是否返回+ve值。如果确实如此,则可以安全地使用wprintf()。 使用完wprintf()后,关闭stdout并重新打开它以再次使用普通printf()。 或者,在现有标准输出上继续使用wprintf()和宽字符函数。
一旦标准输出有一个方向(字节或宽度),它就无法更改并保持,直到关闭为止。

可能与此相关?感谢指针,我们将对其进行检查。也许可以尝试在存储的文件描述符上使用
fdopen
。实际上,你为什么要搞乱文件描述符?您可以使用
fopen
freopen
执行所有操作,并且在结束时只需
fdopen
一次即可恢复原始输出。即使您以
/main>blah.log
的形式运行可执行文件,该怎么办。您能否保证
stdout
将被放回
blah.log
您关于
stdout
的方向是正确的。似乎不能在程序中混合使用
wprintf
printf
调用。我不知道如何关闭和重新打开stdout以指向它所在的位置。请看:以及重新打开()系统调用的手册。
f()
{
    wprintf(L"stdout in f()");
}
[matt test] uname -r
3.4.6-2.fc17.x86_64