В SUSv3 непонятно, что именно означает неопределенная константа: то же, что и определенная константа со значением 0 («возможность может поддерживаться») или же константа со значением –1 («возможность не поддерживается»). Комитет по стандартам впоследствии решил, что этот случай должен означать то же самое, что и конкретная константа со значением –1, и в SUSv4 это четко определено.
В табл. 11.3 приводится список некоторых возможностей, указанных в SUSv3. В первом столбце для возможности дается название связанной с ней константы времени компиляции (определенной в
• Некоторые возможности указаны в SUSv3 как обязательные, то есть константа времени компиляции всегда устанавливается в значение больше нуля. В прежние времена эти возможности фактически были необязательными, но теперь это не так. Эти возможности в столбце примечания помечены символом «плюс» (+). (Будучи необязательными в SUSv3, некоторые свойства стали обязательными в SUSv4.)
Несмотря на то что эти возможности указаны в SUSv3 как обязательные, в отдельных системах UNIX они все равно могут быть установлены в не соответствующей стандарту конфигурации. Поэтому для портируемых приложений лучше, наверное, будет проверить, поддерживается ли возможность, влияющая на работоспособность приложения, независимо от того, что стандарт требует ее обязательной поддержки.
• Для некоторых возможностей константа времени компиляции может иметь значение, отличное от –1. Иными словами, либо возможность должна поддерживаться, либо ее поддержка в ходе выполнения программы должна быть доступна для проверки. Эти возможности в столбце примечания помечены звездочкой (*).
Таблица 11.3.
Отдельные возможности, определенные в SUSv3Название возможности (константы) (имя для sysconf() или pathconf()) — Описание — Примечание
_POSIX_ASYNCHRONOUS_IO (_SC_ASYNCHRONOUS_IO) — Асинхронный ввод/вывод -
_POSIX_CHOWN_RESTRICTED (_PC_CHOWN_RESTRICTED) — Только привилегированные процессы могут применять chown() и fchown() для изменения пользовательского и группового идентификатора файла на произвольные значения (см. подраздел 15.3.2) — *
_POSIX_JOB_CONTROL (_SC_JOB_CONTROL) — Управление заданиями (см. раздел 34.7) — +
_POSIX_MESSAGE_PASSING (_SC_MESSAGE_PASSING) — Очереди сообщений POSIX (см. главу 48) -
_POSIX_PRIORITY_SCHEDULING (_SC_PRIORITY_SCHEDULING) — Диспетчеризация процессов (см. раздел 35.3) —
_POSIX_REALTIME_SIGNALS (_SC_REALTIME_SIGNALS) — Расширение сигналов реального времени (см. раздел 22.8) -
_POSIX_SAVED_IDS (не определено) — У процесса есть сохраненные установленные идентификаторы пользователей (saved set-user-ID) и сохраненные установленные идентификаторы групп (saved set-group-ID) (см. раздел 9.4) — +
_POSIX_SEMAPHORES (_SC_SEMAPHORES) — Семафоры POSIX (см. главу 49) —
_POSIX_SHARED_MEMORY_OBJECTS (_SC_SHARED_MEMORY_OBJECTS) — Объекты совместно используемой памяти POSIX (см. главу 50) —
_POSIX_THREADS (_SC_THREADS) — Потоки POSIX —
_XOPEN_UNIX (_SC_XOPEN_UNIX) — Поддержка XSI-расширения (см. подраздел 1.3.4) -
В SUSv3 указываются ограничения, которые могут накладываться реализацией, и системные возможности, которые реализация может поддерживать.