Какой стандарт определяет значение параметров "sysconf ()", например "_SC_MONOTONIC_CLOCK"? - PullRequest
0 голосов
/ 10 мая 2018

(это дополнительный вопрос для , как проверить, поддерживаются ли монотонные часы )

Я попытался напечатать значение _SC_MONOTONIC_CLOCK и получил 149. Я попробовал Google search на POSIX сайте и не получил результатов.

(Обновление после ответа: 149 на Debian. Только что попробовал на macOS и FreeBSD, и оба используют значение 74.)

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Это расширенный комментарий к ответу Желудя , слишком длинный, чтобы поместиться в комментарии. Намерение состоит в том, чтобы уточнить, как это связано с переносимостью к pynexj и другим, кто озадачен этим.

Константа _SC_MONOTONIC_CLOCK определяется библиотекой C и может отличаться в зависимости от архитектуры, если библиотека C поддерживает несколько архитектур.

Во всех дистрибутивах Linux на одной и той же аппаратной архитектуре используется одна и та же или двоичная совместимая библиотека C. (Бинарная совместимость в этом контексте означает, что все эти библиотеки C определяют одинаковое значение для _SC_MONOTONIC_CLOCK на одинаковых аппаратных архитектурах.)

Это означает, что код, скомпилированный для некоторой архитектуры Linux в каком-либо дистрибутиве Linux, будет работать в других дистрибутивах Linux на той же архитектуре, если выполняются другие зависимости (например, установлены / доступны динамические библиотеки).

На исходном уровне код необходимо компилировать отдельно для каждой архитектуры и операционной системы. В дистрибутивах Linux, использующих одинаковые имена и расположения библиотек, могут работать одни и те же двоичные файлы (если установлены необходимые динамические библиотеки), поскольку их библиотеки C будут либо одинаковыми, либо двоичными.

Некоторые другие ОС имеют уровни совместимости, чтобы предоставить двоичный интерфейс, совместимый с Linux, для запуска двоичных файлов Linux. Они могут запускать некоторые / большинство / все двоичные файлы Linux, в зависимости от того, насколько всеобъемлющим этот уровень совместимости. Это очень похоже на то, как Wine можно использовать для запуска двоичных файлов Windows в Linux.

Существуют определенные реализации библиотек C для странного шарика, и, возможно, некоторые «дистрибутивы», размеченные производителем, с использованием модифицированного / исправленного кода, которые не являются двоично-совместимыми. Я видел их только на встроенных устройствах (особенно на тех, у которых нет MMU или блока управления памятью и, следовательно, они не поддерживают виртуальную память), но не на настольных компьютерах, серверах или ноутбуках.

0 голосов
/ 10 мая 2018

POSIX заявляет , что символические константы _SC_* определены в заголовке unistd.h:

Заголовок unistd.h должен определять следующие символические константы для sysconf(): [...] _SC_MONOTONIC_CLOCK

Однако он не определяет, каково значение такой символической константы - это не должно быть важно для вашего приложения (и вы не должны зависеть от того, какое значение имеет).

Например, библиотека GNU C перечисляет все из них в enum; в то время как newlib определяет явные значения . OpenBSD и NetBSD также используют явные, но разные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...