【发布时间】:2016-05-07 20:09:24
【问题描述】:
我正在编写一个库,它会在出现问题时发出 Linux 内核 4.4 errno 值 --- 这些是在程序的标头中定义的,并且不一定与主机errno 值。 (这样做是有充分理由的,我不能改变这部分。)但我保证它运行的环境:
- 可以运行 ELF64 可执行文件
- 为所有系统调用实现 libc 接口(即我保证系统有一个名为
open的函数,其签名和语义与open(2)相同)。
我意识到,理论上,C/POSIX 标准允许 errno 值是实现者想要的任何值,理论上,我可以使用我想要的任何奇怪的 errno 值来编译我自己的内核。但是我将永远无法可靠地使用我自己没有编译的任何二进制文件,所以我可能会过得很糟糕,而且当事情随机中断时我不会感到惊讶。
实际上,我可以指望这种主机具有与内核的errno.h 中定义的值相同的errno 值吗?即,如果我直接在我的库中设置errno,我是否可以依靠主机的perror 获得明智的行为?
【问题讨论】:
-
它非常依赖于平台,我会说你最好为每个不共享正确 errno 代码的操作系统定义自己的转换代码/
标签: c linux error-handling posix