本机 std::errc/errno 值与一些托管异常/错误代码之间的映射



My .NET Core 应用使用返回标准errno代码的本机库。 问题是这些值在不同的平台上并不相同: 例如,EBADMSG在Windows上104,在Linux上74。 如何在两个平台上统一处理它?POSIX 错误代码与托管异常/错误代码之间是否存在任何映射?

有一个NuGet包Mono.Posix.NETStandard,它实现了各种本机/托管接口,并且与.NET Framework和.NET Core兼容。

您正在寻找函数Mono.Unix.Native.NativeConvert.ToErrno(int),它采用特定于系统的errno整数值,并将关联的符号表示形式作为Mono.Unix.Native.Errno枚举的成员返回。

还有另一种方式,函数NativeConvert.FromErrno(Errno)会将给定的符号值转换为特定于系统的整数。

以您的问题为例:

Console.WriteLine(Mono.Unix.Native.NativeConvert.ToErrno(104).ToString());

Windows 10 x64 上的输出:

EBADMSG

Ubuntu 18.04.2 LTS x64 上的输出:

ECONNRESET

最新更新