是否可以让HANDLE
引用可以在Windows上使用WriteFile
编写的标准错误输出?
我问的原因是我正在为我编写一些日志工具。我试图将数据直接提供给系统:
应用程序是否是Windows子系统,所以它应该只在应用程序实际继承标准错误的任何地方写入?如果那是可能的,那就是。
注意:我已经有OutputDebugString
的日志接收器。它与其他几个平台相当。并且文件,它使用低级API来避免任何额外的缓冲(因为消息已经在堆栈缓冲区中组装并且需要立即刷新)。我只是想重用代码来编写文件来写标准错误。
答案 0 :(得分:9)
将GetStdHandle
与STD_ERROR_HANDLE
一起使用。
HANDLE stderr = GetStdHandle(STD_ERROR_HANDLE);
WriteFile(stderr, /*...*/);
答案 1 :(得分:-1)
stderr
不是Windows原生的,在进程初始化C运行时库子系统(?)之前不会打开。
WriteFile
是因为它是写入的最低级API,但WriteFile
可能会破坏stderr
的内部一致性,这显然没有正确锁定。
为了调试/跟踪,Windows SDK提供了OutputDebugString
API。许多Windows程序员使用此API和DebugView进行开发。
对于一般日志记录,Write an Event to the Event viewer会更有用。
我的建议是VC ++ CRTDBG库(link)。真的很棒!