我正在编写一个库,它会在出现问题时发出 Linux 内核 4.4 errno
值 --- 这些是在程序的 header 中定义的,不一定 与主机 errno
值相同。 (这样做是有充分理由的,我不能改变这部分。)但我保证它运行的环境:
- 可以运行ELF64可执行文件
- 为所有系统调用实现 libc 接口(interface)(即我保证系统有一个名为
open
的函数,其签名和语义与open(2)
相同) .
我意识到在理论上,C/POSIX 标准允许 errno
值是实现者想要的任何值,并且在理论上,我可以用任何奇怪的 编译我自己的内核errno
我想要的值。但是我将永远无法可靠地使用任何不是我自己编译的二进制文件,所以我可能会度过一段糟糕的时光,而且当事情随机中断时我不会感到惊讶。
实际上,我可以指望这种主机具有与内核的 errno.h
中定义的值相同的 errno
值吗?即,如果我直接在我的库中设置 errno
,我能否依赖从主机的 perror
获得明智的行为?
最佳答案
这是一个非常大的列表,将 POSIX 的 ERRNO 值与各种系统上的实际关联消息和数字进行比较。例如,Linux 和 BSD 之间的一些差异在电子表格中很明显:
http://www.ioplex.com/~miallen/errcmp.html
所以答案是,也许在实践中它相当安全,具体取决于您正在查看的代码?例如 ENOMEM
、EACCESS
,在此处列出的所有平台上都是相同的。
但一般不会。
关于c - *nix 系统的 errno 值是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095560/