1. 背景知识介绍
1.Win32 Handles和RTL Handles
标准C定义的文件操作类型为FILE*
Win32 API定义文件操作的类型为 HANDLE, 在Windows平台上, 标准C的输入输出函数是HANDLE实现, 标准C的输入输出FILE* 类型会和相应的HANDLE关联。
标准C函数预定义了三个FILE* 变量: stdin, stdout和stderr
Win32 也分别定义了这三个HANDLE, 可以通过HANDLE GetStdHandle() 函数取得
GetStdHandle 参数:
STD_INPUT_HANDLE
STD_OUTPUT_HANDLE
STD_ERROR_HANDLE
这些HANDLE都可以重定向到文件或者控制台窗口,Win32 GUI程序没有控制台窗口,所以Win32的这三个File HANDLE也没有指向Standard input, output, error, 但是我们可以将这三个 FILE HANDLE重定向到控制台窗口,然后将标准C FILE* 关联到这些HANDLE。然后我们就可以正常使用C标准输入输出函数了。
其他用到的函数
_open_osfhandle() 函数, 返回一个RTL handle, 这个RTL handle与Win32 FILE HANDLE相关联, 通过这个RTL handle重定向I/O
FILE *_fdopen(int fd, const char *mode ); 基于文件描述符打开一个C输入输出流
代码
测试
参考
http://www.halcyon.com/~ast/dload/guicon.htm