我有一个 Windows Win32/GUI应用程序,有时会将有趣的输出同时打印到
问题是,我可以成功地调用
下面是一个简单的程序,用于重现这个问题;如果我注释掉其中一个
在 Windows 下是否有可能实现这一点?我可以退而求其次,创建两个不同的文件 (例如
stdout
和 stderr
中,因此我想要做的就是在应用程序退出后将该输出捕获到文件中进行审查。问题是,我可以成功地调用
freopen_s()
来将 stdout
输出捕获到文件中,或者 我可以使用它来将 stderr
输出捕获到文件中,但试图同时执行两个操作只会生成带有乱码数据的截断文件。下面是一个简单的程序,用于重现这个问题;如果我注释掉其中一个
freopen_s()
调用,则会在创建的 blah.txt
文件中得到预期的输出(即其中一个文本行),但我想要的是最终得到一个包含两个文本行的 blah.txt
。在 Windows 下是否有可能实现这一点?我可以退而求其次,创建两个不同的文件 (例如
blah_stdout.txt
和 blah_stderr.txt
),但我不想这样做,因为那样我就必须手动重构 stdout 和 stderr 输出所生成的相对顺序。int main(int argc, char *argv[])
{
const char * outFileName = "blah.txt";
FILE * junk1 = NULL, junk2 = NULL;
if (freopen_s(&junk1, outFileName, "w", stdout) != 0) abort();
if (freopen_s(&junk2, outFileName , "w", stderr) != 0) abort();
printf("This text was printed to stdout and should appear in blah.txt\n");
fprintf(stderr, "This text was printed to stderr and should appear in blah.txt\n");
return 0;
}
_osfhnd(1)
来获取内部的HANDLE
,并查看其是否为_NO_CONSOLE_FILENO
进行验证。此代码位于_file.cpp
中。 - Mgetz