c语言 - 哪个标准定义了"sysconf()"选项(如"_SC_MONOTONIC_CLOCK")的值?



(这是关于如何检查是否支持单调时钟的后续问题(

我尝试打印_SC_MONOTONIC_CLOCK的值并得到149.我在POSIX网站上尝试了谷歌搜索,但没有得到任何结果。

(在回答后更新:149在 Debian 上。刚刚在macOS和FreeBSD上尝试过,两者都使用值74

POSIX 声明符号常量_SC_*unistd.h标头中定义:

unistd.h标头应为sysconf()定义以下符号常量: [...]_SC_MONOTONIC_CLOCK

但是,它没有定义这种符号常量的值是什么 - 它对您的应用程序来说并不重要(并且您不应该依赖于哪个值(。

例如,GNU C库在一个enum中列出了所有这些值;而newlib定义了显式值。OpenBSD和NetBSD也使用显式但不同的值。

这是对 Acorn 答案的扩展评论,太长而无法放入评论中。目的是澄清这与 pynexj 和其他对此感到困惑的人的可移植性有何关系。

常量_SC_MONOTONIC_CLOCK由 C 库定义,如果 C 库支持多个体系结构,则常量可能因体系结构而异。

在相同硬件体系结构、相同或二进制兼容的所有 Linux 发行版上,使用 C 库。(在此上下文中,二进制兼容意味着所有这些 C 库为相同硬件体系结构上的_SC_MONOTONIC_CLOCK定义相同的值。

这意味着,如果满足其他依赖项(如已安装/可用的动态库(,则在某些 Linux 发行版上为某些 Linux 体系结构编译的代码将在同一体系结构上的其他 Linux 发行版中工作。

在源代码级别,需要为每个体系结构和操作系统单独编译代码。 使用相同的库名称和位置的 Linux 发行版可以运行相同的二进制文件(如果安装了必要的动态库(,因为它们的 C 库要么相同,要么与二进制兼容。

其他一些操作系统具有兼容层,以公开用于运行 Linux 二进制文件的 Linux 二进制兼容接口。这些可以运行一些/大多数/所有 Linux 二进制文件,具体取决于该兼容层的全面程度。这与 Wine 在 Linux 中用于运行 Windows 二进制文件的方式非常相似。

有一些古怪的 C 库实现,可能还有一些使用修改/修补代码的制造商分叉的"发行版",它们不兼容二进制。 不过,我只在嵌入式设备上看到过这些(特别是那些缺少 MMU 或内存管理单元的设备,因此不支持虚拟内存的设备(,而不是在台式机、服务器或笔记本电脑上。

最新更新