3

是否可以参考可以在 WindowsHANDLE上编写的标准错误输出?WriteFile

我问的原因是我正在为我编写一些日志记录实用程序。我正在尝试将数据直接提供给系统:

  • 避免任何潜在的问题与不被冲洗的东西和
  • 让系统在不需要锁定的情况下交错来自不同线程的消息(如果这确实有效是另一个问题)。

该应用程序是 Windows 子系统,所以它应该只在应用程序实际继承​​标准错误的情况下写入任何地方?如果可能的话,那就是。

注意:我已经有日志接收器到OutputDebugString. 它是其他几个平台的等价物。并且到文件,它使用低级 API 来避免任何额外的缓冲(因为消息已经组装在堆栈缓冲区中并且需要立即刷新)。而且我只想重用编写文件的代码来编写标准错误。

4

2 回答 2

9

GetStdHandle与 一起使用STD_ERROR_HANDLE

HANDLE stderr = GetStdHandle(STD_ERROR_HANDLE);
WriteFile(stderr, /*...*/);
于 2013-01-07T13:12:45.140 回答
-1

stderr不是 Windows 原生的,并且在进程初始化 C 运行时库子系统(?)之前不会打开。

WriteFile之所以选择它是因为它是用于编写的最低级别 API,但WriteFile可能会破坏 的内部一致性stderr,这显然是没有适当的锁定。

出于调试/跟踪目的,Windows SDK 提供OutputDebugStringAPI。许多 Windows 程序员使用此 API 和DebugView进行开发。

对于一般日志记录,将事件写入事件查看器会更有用。

我的推荐是 VC++ CRTDBG 库(链接)。真的很棒!

于 2013-01-07T14:07:25.397 回答