gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:48 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com