c++ - 如何使用 WriteFile 写入 stderr

标签 c++ winapi

是否有可能获得 HANDLE 引用可以在 Windows 上使用 WriteFile 写入的标准错误输出?

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

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

应用程序是 windows 子系统,所以如果应用程序确实继承了标准错误,它应该只写在任何地方?如果可能的话,那就是。

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

最佳答案

使用GetStdHandle使用 STD_ERROR_HANDLE

HANDLE stderr = GetStdHandle(STD_ERROR_HANDLE);
WriteFile(stderr, /*...*/);

关于c++ - 如何使用 WriteFile 写入 stderr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196716/

相关文章:

c++ - 在类中访问 malloc'd 二维数组时出现段错误

c++ - 调用提取重载程序产生错误 undefined reference to `operator>>

c++ - 为什么 vector::pop_back 会使迭代器 (end() - 1) 无效?

c++ - 将 std::function 作为参数传递时出现问题

C++:Matrix的转置,使用SINGLE DIMENSION动态数组保存元素

c++ - 当转换为 PUCHAR 并打印到控制台时,硬编码字符串给出的结果与从控制台读取的字符串不同

c# - SHGetKnownFolderPath/Environment.GetFolderPath() 返回公共(public)文档的错误值

c++ - 如何检查给定路径是否指向现有文件或目录?

c - Win32应用程序中的神秘窗口消息0xc0e8

delphi - EnumWindows 在 64 位 Delphi 中行为异常