Как очистить errno
в .NET
Core?
Я могу прочитать это достаточно легко по Marshal.GetLastWin32Error()
, но нет очевидного способа установить или очистить его. Поиски в Google были невероятно бесполезны.
Marshal.SetLastError()
не существует.
Не могу записать P / Invoke для errno
. Это нить-статическая переменная.
Если вам интересно, почему кто-то захочет установить его, см. man 3 readdir
. API, в частности, требует установки errno
в 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();
}
Если код где ???? будет опущен, получаются ложные ошибки.
Полагаю, если я застряну полностью, я могу сделать что-то глупое, например сделать что-то, что не получается, с определенным кодом ошибки и проверить его, но не так уж много случаев, когда мы можем полностью исключить одну конкретную ошибку, которая легко генерироваться.