我看到 strerror_r(...) API 在 Visual C++ 2008 中不再受支持,可能是因为线程安全问题。我想在我的程序中使用类似的功能。 是否有其他 winapi 与 strerror_r(..) 做同样的事情?
您可以尝试strerror_s。它似乎是线程安全的。
注意strerror_s的参数顺序与strerror_r不同。如果编写可移植代码,您可能需要使用定义
#define strerror_r(errno,buf,len) strerror_s(buf,len,errno)
我看到 Visual C++ 2008 不再支持 strerror_r(...) API,可能是因为线程安全问题
我不相信它曾经得到支持。该链接指向 MKS Toolkit 的文档,而不是 Visual C++ 2008。 strerror_r 函数的存在是一个线程安全的 strerror。 Microsoft 的 URL 有很快就会生锈的趋势,但是今天,https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/strerror-strerror-wcserror-wcserror?view=vs-2019 意味着 vanilla strerror 在 Windows 上是线程安全的,其中:
所有这些函数都返回一个指向错误消息字符串的指针,该指针位于运行时拥有的线程本地存储缓冲区中。稍后对同一线程的调用可以覆盖该字符串。
所以在Windows上不需要使用strerror_r。