我正在编写一个库,当出现问题时会发出Linux内核4.4 errno
值 - 这些库在程序的标题中定义,并且必然相同作为主机errno
值。 (有充分的理由这样做,我无法改变它的这一部分。)但我保证它正在运行的环境:
open
的函数,其签名和语义与open(2)
相同。)我意识到理论上,C / POSIX标准允许errno
值是实现者想要的值,理论上,我可以用任何奇怪的errno
值编译我自己的内核我想要。但是后来我永远无法可靠地使用任何我自己编译的二进制文件,所以我可能会遇到一个糟糕的时间,并且当事情随机破坏时我不会感到惊讶。
实际上,我可以指望这种主机具有与内核errno
中定义的值相同的errno.h
值吗?即如果我直接在我的图书馆中设置perror
,我可以依赖主持人errno
的合理行为吗?
答案 0 :(得分:4)
这是一个非常大的列表,将POSIX的ERRNO值与各种系统上的实际关联消息和数字进行比较。例如,Linux和BSD之间的一些差异在电子表格中很明显:
http://www.ioplex.com/~miallen/errcmp.html
所以答案是,也许在实践中它相当安全,具体取决于您正在查看的代码?例如,{{1}},{{1}}在所有列出的平台上都是相同的。
但总的来说没有。
答案 1 :(得分:2)
这些名字是可靠的,至少是Posix中的名字。实际值,而不是。例如,它们在Linux和* BSD之间肯定有所不同。
如果您使用主持人Log.d(...)
进行翻译,那么您可以。其他任何东西都是推测性的。
答案 2 :(得分:2)
实际上它确实取决于错误。低于约35,它们是相同的,除了EAGAIN,它没有那么大的改变,但分裂不同。 (谁得到旧号码?EAGAIN或EDEADLK?)
我可以想到两件可行的方法: