代码之家  ›  专栏  ›  技术社区  ›  pynexj

哪个标准定义了“sysconf()”选项的值,如“\u SC\u MONOTONIC\u CLOCK”?

  •  1
  • pynexj  · 技术社区  · 8 年前

    (这是针对 how to check if monotonic clock is supported )

    我试着打印 _SC_MONOTONIC_CLOCK 得到了 149 .我试过谷歌 search 在…上 POSIX 并没有得到任何结果。

    (回答后更新: 149 在Debian上。刚刚在macOS和FreeBSD上试用过,都在使用value 74 .)

    2 回复  |  直到 8 年前
        1
  •  3
  •   Acorn    8 年前

    POSIX states 符号常量 _SC_* 定义在 unistd.h 标题:

    这个 unistd。H 标题应定义以下符号常量 sysconf() :[…] _SC_MONOTONIC_CLOCK

    然而,它并没有定义这样的符号常量的值是什么——这对于您的应用程序来说并不重要(并且您不应该依赖于值是什么)。

    例如,GNU C库列出了所有这些 in an enum ;而newlib定义 explicit values 。 OpenBSD 和 NetBSD 也可以使用明确但不同的值。

        2
  •  1
  •   Nominal Animal    8 年前

    这是对的扩展注释 Acorn's answer ,太长,无法插入评论。目的是澄清这与pynexj和其他对此感到困惑的人的可移植性之间的关系。

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

    在相同硬件体系结构、相同或二进制兼容的所有Linux发行版上,使用C库。(在此上下文中,二进制兼容意味着所有这些C库为 _SC\U单调时钟 在相同的硬件体系结构上。)

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

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

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

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

    推荐文章