I'm writing POSIX filesystem和使用Dokan的Windows之间的图层,需要转换errno kind(EINVAL
,{{1}的错误值调用GetLastError()
时收到的Win32等效项(例如ERROR_INVALID_PARAMETER
)。
我可以使用现有的功能,库或参考来执行这些转换吗?
我通常会在Python上寻找灵感来解决这些问题,但Python巧妙地避免了这种需求(至少就我所知)。
例如,ENOENT
会转换为EINVAL (22)
。
答案 0 :(得分:10)
我过去曾做过关于这个主题的实验,主要基于Microsoft DOSMAP.CPP单元。但是,我当时取消了该项目,因为错误映射并不总是适用于特定的错误代码。例如,并非每个POSIX版本都为EINVAL
返回ERROR_INVALID_ACCESS
,其中一些版本会返回EACCES
。我还对errno.h system error numbers of POSIX.1-2008和DOSMAP.CPP,mingw.c,Postgresql error.c,tclWinError.c,MySQL my_winerr.c
以及更多内容进行了比较;有时,映射规则因特定错误代码而异。就个人而言,我建议你只处理它们之间的一致错误代码映射。
答案 1 :(得分:5)
对于每个errno
,通常会有许多可能的GetLastError
值,因此您的想法可能不一定可行。
无论如何,我只是用谷歌搜索“errno to getlasterror”,第一次谷歌搜索提供了来自Cygwin来源的this correspondence list。
这是错误的方式,GetLastError
到errno
,但也许有用吗?
干杯&第h