Error handling 本机std::errc/errno值与某些托管异常/错误代码之间的映射
My.NET Core应用程序使用返回标准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
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
整数值,你必须以某种方式将它映射回一个符号名(这就是问题所在)。