Не изменяемое динамически значение является ограничением, чье значение, если оно определено в
Примером такого не изменяемого динамически ограничения может быть MQ_PRIO_MAX. Как отмечается в разделе 48.5.1, это ограничение приоритетов для сообщений в очереди сообщений POSIX. В SUSv3 определена константа _POSIX_MQ_PRIO_MAX со значением 32, которое служит в качестве минимального значения и должно предоставляться для этого ограничения всеми соответствующими реализациями. Иными словами, мы можем быть уверены, что все соответствующие реализации позволят использовать для сообщений приоритеты от 0 и как минимум до 31. Реализация UNIX может установить и более высокое ограничение, определив в
lim = sysconf(_SC_MQ_PRIO_MAX);
Изменяемые значения путевых имен — это ограничения, относящиеся к путевым именам (файлов, каталогов, терминалов и т. д.). Каждое ограничение может быть константой для отдельно взятой реализации или может изменяться от одной файловой системы к другой. В тех случаях, когда ограничение может изменяться в зависимости от путевого имени, приложение способно определить его значение с помощью функции pathconf() или fpathconf().
Примером изменяемого значения путевого имени может послужить ограничение NAME_MAX. Оно определяет максимальный размер имени файла в конкретной файловой системе. В SUSv3 предусмотрена константа _POSIX_NAME_MAX со значением 14 (это ограничение из старой файловой системы System V), используемым в качестве минимального значения, которое должна допускать реализация. В реализации может быть определена константа NAME_MAX с ограничением выше этого значения, и (или же) информация о конкретной файловой системе может быть доступна по такому вызову:
lim = pathconf(
Аргумент directory_path является путевым именем для каталога интересующей нас файловой системы.
Значение, которое может увеличиваться в ходе выполнения программы, является ограничением, имеющим для конкретной реализации фиксированное минимальное значение. Все системы, в которых запущена данная реализация, будут предоставлять по крайней мере это минимальное значение. Но конкретная система может поднять это ограничение в ходе выполнения программы, а приложение может определить конкретное поддерживаемое в системе значение с помощью функции sysconf().
Примером значения, которое может увеличиваться в ходе выполнения программы, может послужить константа NGROUPS_MAX. Она определяет максимальное количество одновременно используемых для процесса дополнительных групповых идентификаторов (см. раздел 9.6). В SUSv3 установлено соответствующее минимальное значение: _POSIX_NGROUPS_MAX, равное 8. В ходе выполнения программы приложение может извлечь ограничение с помощью вызова sysconf(_SC_NGROUPS_MAX).
В табл. 11.1 приведен список некоторых установленных в SUSv3 ограничений, имеющих отношение к материалам данной книги (остальные ограничения будут описаны в последующих главах).
Таблица 11.1.
Отдельные ограничения, определенные в SUSv3Название ограничения (
Минимальное значение
sysconf()/pathconf() название (
Описание
ARG_MAX
4096
_SC_ARG_MAX
Максимальное количество байтов для аргументов (argv) и для переменных среды (environ), которое может быть предоставлено exec() (см. раздел 6.7 и подраздел 27.2.3)
Не определено
Не определено
_SC_CLK_TCK
Единица измерения для times()