- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我对 GetLastError()
和 errno
之间的确切关系感到困惑。它们是相同的数值,还是完全不同的东西?我怎么知道我应该检查哪一个?
如果我想将错误代码转换为字符串进行调试,我可以将 FormatMessageA()
与 strerror_s()
互换使用吗?
最后,WSAGetLastError()
是否总是返回与 GetLastError()
相同的值,还是它们都返回不同的值?
最佳答案
GetLastError 和errno 没有关系。
GetLastError 获取由 Windows API 函数(针对当前线程)设置的最后一个错误,而 errno 包含由 C 运行时库函数(也针对当前线程)存储到其中的最后一个错误。
几乎所有将错误返回给调用者的 WinAPI 函数都会以某种方式指示错误发生的时间,然后设置调用者通过调用 GetLastError 获取的错误。注意:并非所有 WinAPI 函数都会向其调用者返回错误。
例如,WinAPI 函数 CreateFile 的文档说:
如果函数成功,返回值是指定文件、设备、命名管道或邮槽的打开句柄。如果函数失败,返回值为 INVALID_HANDLE_VALUE。要获取扩展的错误信息,请调用 GetLastError。
将错误返回给调用者的 C 运行时库函数将以某种方式指示何时发生错误,然后将值存储在 errno 中。注意:并非所有 C 运行时库函数都会向其调用者返回错误。
例如,C 运行时库函数 sqrt 的文档说:
sqrt 函数计算其参数的非负平方根。如果其参数为负,则会发生域错误。
有关域错误的文档说:
在出现域错误时,该函数返回一个实现定义的值;值 EDOM 存储在 errno 中。
GetLastError 返回的值与存储在 errno 中的值不同,所以我认为这回答了有关使用 FormatMessage 和 strerror_s 的问题。
我不知道 WSAGetLastError 是否总是返回与 GetLastError 相同的值(尽管我注意到 GetLastError 返回的错误代码列表确实包括 WSAGetLastError 可以返回的错误代码)。参见 System Error Codes (9000-11999) .如果您查看从 10000 左右开始的错误代码,您将看到 WSAGetLastError 错误代码。
无论如何,我个人不会依赖它们返回相同的值。为什么那会有用?只需按照文档并为 Winsock2 函数调用 WSAGetLastError,为其他 WinAPI 函数调用 GetLastError。注意:您可以对任一函数返回的错误代码使用 FormatMessage。
关于c - GetLastError()、errno、FormatMessageA() 和 strerror_s()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20056851/
我写了一个跨平台代码,给出了当前日期 (mm/dd/yy) 和时间 (hh/mm/ss) 和完整日期 (yyyymmdd),此代码适用于 windows(MSVS2015) 但不适用于Linux(GC
我对 GetLastError() 和 errno 之间的确切关系感到困惑。它们是相同的数值,还是完全不同的东西?我怎么知道我应该检查哪一个? 如果我想将错误代码转换为字符串进行调试,我可以将 For
我在使用 strerrorlen_s 时遇到问题在 gcc 4.7.2 中,即使我定义了 __STDC_WANT_LIB_EXT1__ 1. 最佳答案 它不在 glib 2.13 中,至少在 Debi
我正在尝试使用 lua-openssl 构建一个 openresty alpine 镜像,如下所示 FROM openresty/openresty:alpine-fat # Set the vers
我是一名优秀的程序员,十分优秀!