适用于 Windows 操作系统的 strerror_r 替代 api

问题描述 投票:0回答:2

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

c++ c winapi visual-c++ boost
2个回答
11
投票

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

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

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

0
投票

我看到 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。

© www.soinside.com 2019 - 2024. All rights reserved.