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