猿问

哪个标准定义了诸如“ _SC_MONOTONIC_CLOCK”之类的“ sysconf()”

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



拉丁的传说
浏览 306回答 2
2回答

跃然一笑

POSIX声明符号常量_SC_*在unistd.h标头中定义:该unistd.h标题应当载明下列符号常量sysconf():[...]_SC_MONOTONIC_CLOCK但是,它没有定义这种符号常量的值是什么-它对您的应用程序并不重要(并且您不应该依赖于该值)。例如,GNU C库将所有这些都列出在enum;中。而newlib定义了显式值。OpenBSD和NetBSD也使用显式但不同的值。

不负相思意

目的是弄清楚这与pynexj和其他对此感到困惑的人的可移植性之间的关系。该常量_SC_MONOTONIC_CLOCK由C库定义,并且如果C库支持多种体系结构,则常量可能因体系结构而异。在具有相同硬件体系结构的所有Linux发行版上,都使用相同或二进制兼容的C库。(在这种情况下,二进制兼容意味着所有这些C库_SC_MONOTONIC_CLOCK在相同的硬件体系结构上定义相同的值。)这意味着,如果满足其他依赖项(例如已安装/可用的动态库),则在某些Linux发行版中为某些Linux架构编译的代码将在同一架构上的其他Linux发行版中工作。在源代码级别,需要针对每种体系结构和操作系统分别编译代码。使用相同库名称和位置的Linux发行版可以运行相同的二进制文件(如果安装了必要的动态库),因为它们的C库可以是相同的,也可以是二进制兼容的。其他一些操作系统具有兼容性层,以公开用于运行Linux二进制文件的Linux二进制兼容接口。它们可以运行某些/大多数/所有Linux二进制文件,具体取决于该兼容层的综合程度。这与在Linux中使用Wine来运行Windows二进制文件非常相似。有某些怪异的C库实现,并且可能有一些制造商使用修改/修补的代码伪造的“发行版”,它们与二进制不兼容。我只在嵌入式设备(特别是那些缺少MMU或内存管理单元,因此不支持虚拟内存的设备)上看到这些,但是在台式机,服务器或笔记本电脑上却没有看到。
随时随地看视频慕课网APP
我要回答