c - *nix 系统的 errno 值是否不同?

标签 c linux error-handling posix

我正在编写一个库,它会在出现问题时发出 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

所以答案是,也许在实践中它相当安全,具体取决于您正在查看的代码?例如 ENOMEMEACCESS,在此处列出的所有平台上都是相同的。

但一般不会。

关于c - *nix 系统的 errno 值是否不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095560/

相关文章:

c - 是否可以在 Linux 上预测 C 中的堆栈溢出?

.net - C# .NET v3.5 应用程序的日志记录/错误处理框架的最佳方法? (企业库/log4net/?)

powershell - 怎么回声$?工作?

c - 与 union 产出作斗争

c++ - 编写同时适用于 C 和 C++ 的结构代码

C打印空间金字塔

linux - 即使网站在线,Ping 也返回错误

android - 通过ndk连接套接字编程的错误

将 CAN 消息转换为常规值

objective-c - 此类与键错误的键值编码不兼容