【问题标题】:Alternative api of strerror_r for windows OS用于 windows 操作系统的 strerror_r 的替代 api
【发布时间】:2012-07-27 23:14:34
【问题描述】:

我看到 strerror_r(...) API 在 Visual C++ 2008 中不再受支持,可能是因为线程安全问题。我想在我的程序中使用类似的功能。 有没有其他的 winapi 和 strerror_r(..) 做同样的事情?

【问题讨论】:

    标签: c++ c winapi visual-c++ boost


    【解决方案1】:

    你可以试试strerror_s。它似乎是线程安全的。

    注意strerror_s的参数顺序与strerror_r不同。如果编写可移植代码,您可能需要使用定义

    #define strerror_r(errno,buf,len) strerror_s(buf,len,errno)
    

    【讨论】:

    • 不确定,如果它的线程安全。不过,这是我想要的替代方案,所以谢谢你的回答..
    • 指向 strerror_s 的链接是“已停用的文档”。现在似乎是 C11 的一部分:en.cppreference.com/w/c/string/byte/strerror
    【解决方案2】:

    我看到 Visual C++ 2008 不再支持 strerror_r(...) API,可能是因为线程安全问题

    我不相信它曾经得到支持。该链接指向 MKS Toolkit 而不是 Visual C++ 2008 的文档。 strerror_r 函数的存在是一个线程安全的 strerror。 Microsoft 的 URL 有快速生锈的趋势,但今天,https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/strerror-strerror-wcserror-wcserror?view=vs-2019 暗示 vanilla strerror 在 Windows 上是线程安全的,其中:

    所有这些函数都返回一个指向错误消息字符串的指针,该指针位于运行时拥有的线程本地存储缓冲区中。以后在同一个线程上的调用可以覆盖这个字符串。

    所以没有必要在 Windows 上使用 strerror_r。

    【讨论】:

      猜你喜欢
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2010-09-14
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2022-11-10
      相关资源
      最近更新 更多