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

Error handling 本机std::errc/errno值与某些托管异常/错误代码之间的映射,error-handling,.net-core,Error Handling,.net Core,My.NET Core应用程序使用返回标准errno代码的本机库。 问题在于,不同平台上的这些值不同: 例如,EBADMG在Windows上是104,在Linux上是74。 如何在两个平台上统一处理它?POSIX错误代码和托管异常/错误代码之间是否存在映射?有一个NuGet包,它实现了各种本机/托管接口,并且与.NET Framework和.NET Core都兼容 您正在查找函数Mono.Unix.Native.NativeConvert.ToErrno(int),该函数接受系统特定的errno

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

有一个NuGet包,它实现了各种本机/托管接口,并且与.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

当然这就是为什么你使用象
EBADMSG
这样的符号名,而不是特定的数值?@NeilButterworth好吧,如果本机函数调用给你一些
errno
整数值,你必须以某种方式将它映射回一个符号名(这就是问题所在)。