哪个标准定义了 "sysconf()" 选项的值,例如“_SC_MONOTONIC_CLOCK”?
Which standard defines the value of "sysconf()" options like "_SC_MONOTONIC_CLOCK"?
(这是 的后续问题)
我尝试打印 _SC_MONOTONIC_CLOCK
的值并得到 149
。我尝试了 Google search on POSIX 网站,但没有结果。
(回答后更新:149
在 Debian 上。刚刚在 macOS 和 FreeBSD 上试过,两者都使用值 74
。)
POSIX states表示符号常量_SC_*
定义在unistd.h
header:
The unistd.h
header shall define the following symbolic constants for sysconf()
: [...] _SC_MONOTONIC_CLOCK
但是,它没有定义这种符号常量的值是什么——它对您的应用程序不应该很重要(并且您不应该依赖于该值是什么)。
例如,GNU C 库列出了所有这些 in an enum
; while newlib defines explicit values. OpenBSD and NetBSD 也使用显式但不同的值。
这是对 的扩展评论,太长而无法放入评论中。目的是阐明这与 pynexj 和其他对此感到困惑的人的可移植性有何关系。
常量 _SC_MONOTONIC_CLOCK
由 C 库定义,如果 C 库支持多种架构,则可能因架构而异。
在相同硬件架构上的所有 Linux 发行版中,使用相同或二进制兼容的 C 库。 (在此上下文中的二进制兼容意味着所有这些 C 库在相同的硬件架构上为 _SC_MONOTONIC_CLOCK
定义了相同的值。)
这意味着在某些 Linux 发行版上为某些 Linux 架构编译的代码将在同一架构上的其他 Linux 发行版中运行,如果其他依赖项(如动态库 installed/available) 都满足了。
在源代码层面,需要针对每个体系结构和操作系统单独编译代码。 Linux 使用相同库名称和位置的发行版可以 运行 相同的二进制文件(如果安装了必要的动态库),因为它们的 C 库要么相同,要么二进制兼容。
其他一些操作系统有兼容层,为 运行 宁 Linux 二进制文件公开 Linux 二进制兼容接口。这些可以 运行 some/most/all Linux 二进制文件,具体取决于兼容层的全面程度。这与 Wine 可用于 运行 Windows Linux.
二进制文件的方式非常相似
有一些古怪的 C 库实现,可能还有一些使用 modified/patched 代码的制造商分叉 "distributions",它们不是二进制兼容的。不过,我只在嵌入式设备上看到过这些(特别是那些缺少 MMU 或内存管理单元,因此不支持虚拟内存的设备),而不是在台式机、服务器或笔记本电脑上。
(这是
我尝试打印 _SC_MONOTONIC_CLOCK
的值并得到 149
。我尝试了 Google search on POSIX 网站,但没有结果。
(回答后更新:149
在 Debian 上。刚刚在 macOS 和 FreeBSD 上试过,两者都使用值 74
。)
POSIX states表示符号常量_SC_*
定义在unistd.h
header:
The
unistd.h
header shall define the following symbolic constants forsysconf()
: [...]_SC_MONOTONIC_CLOCK
但是,它没有定义这种符号常量的值是什么——它对您的应用程序不应该很重要(并且您不应该依赖于该值是什么)。
例如,GNU C 库列出了所有这些 in an enum
; while newlib defines explicit values. OpenBSD and NetBSD 也使用显式但不同的值。
这是对
常量 _SC_MONOTONIC_CLOCK
由 C 库定义,如果 C 库支持多种架构,则可能因架构而异。
在相同硬件架构上的所有 Linux 发行版中,使用相同或二进制兼容的 C 库。 (在此上下文中的二进制兼容意味着所有这些 C 库在相同的硬件架构上为 _SC_MONOTONIC_CLOCK
定义了相同的值。)
这意味着在某些 Linux 发行版上为某些 Linux 架构编译的代码将在同一架构上的其他 Linux 发行版中运行,如果其他依赖项(如动态库 installed/available) 都满足了。
在源代码层面,需要针对每个体系结构和操作系统单独编译代码。 Linux 使用相同库名称和位置的发行版可以 运行 相同的二进制文件(如果安装了必要的动态库),因为它们的 C 库要么相同,要么二进制兼容。
其他一些操作系统有兼容层,为 运行 宁 Linux 二进制文件公开 Linux 二进制兼容接口。这些可以 运行 some/most/all Linux 二进制文件,具体取决于兼容层的全面程度。这与 Wine 可用于 运行 Windows Linux.
二进制文件的方式非常相似有一些古怪的 C 库实现,可能还有一些使用 modified/patched 代码的制造商分叉 "distributions",它们不是二进制兼容的。不过,我只在嵌入式设备上看到过这些(特别是那些缺少 MMU 或内存管理单元,因此不支持虚拟内存的设备),而不是在台式机、服务器或笔记本电脑上。