如何清除
errno
.NET
核心?
Marshal.GetLastWin32Error()
但没有明显的方法来设定或清除它。谷歌搜索毫无用处。
Marshal.SetLastError()
不存在。
我好像写不出一个P/Invoke
. 它是线程静态本机变量。
如果你想知道为什么有人会想设置它,看到了吗
man 3 readdir
. API特别要求设置
到
0
本机代码就是这样的:
errno = 0;
struct dirent *entry = readdir(dir);
if (entry == NULL && errno != 0) {
/* Handle error */
}
.NET
代码:
????
IntPtr entry NativeMethods.readdir(dir);
if (entry == IntPtr.Zero && Marshal.GetLastWin32Error() != 0) {
throw new IOException();
}
如果代码在哪里????会被省略,这就得到了伪错误。
我想,如果我完全陷入困境,我可以做一些愚蠢的事情,比如用一个明确的错误代码做一些失败的事情,然后检查那个错误代码,但是在很多情况下,我们可以完全排除一个容易产生的特定错误。