Примером изменяемого значения путевого имени может послужить ограничение NAME_MAX. Оно определяет максимальный размер имени файла в конкретной файловой системе. В SUSv3 предусмотрена константа _POSIX_NAME_MAX со значением 14 (это ограничение из старой файловой системы System V), используемым в качестве минимального значения, которое должна допускать реализация. В реализации может быть определена константа NAME_MAX с ограничением выше этого значения, и (или же) информация о конкретной файловой системе может быть доступна по такому вызову:
lim = pathconf(directory_path, _PC_NAME_MAX)
Аргумент directory_path является путевым именем для каталога интересующей нас файловой системы.
Значения, которые могут увеличиваться в ходе выполнения программы
Значение, которое может увеличиваться в ходе выполнения программы, является ограничением, имеющим для конкретной реализации фиксированное минимальное значение. Все системы, в которых запущена данная реализация, будут предоставлять по крайней мере это минимальное значение. Но конкретная система может поднять это ограничение в ходе выполнения программы, а приложение может определить конкретное поддерживаемое в системе значение с помощью функции sysconf().
Примером значения, которое может увеличиваться в ходе выполнения программы, может послужить константа NGROUPS_MAX. Она определяет максимальное количество одновременно используемых для процесса дополнительных групповых идентификаторов (см. раздел 9.6). В SUSv3 установлено соответствующее минимальное значение: _POSIX_NGROUPS_MAX, равное 8. В ходе выполнения программы приложение может извлечь ограничение с помощью вызова sysconf(_SC_NGROUPS_MAX).
Отдельные ограничения, определенные в SUSv3
В табл. 11.1 приведен список некоторых установленных в SUSv3 ограничений, имеющих отношение к материалам данной книги (остальные ограничения будут описаны в последующих главах).
Таблица 11.1. Отдельные ограничения, определенные в SUSv3
Название ограничения (<limits.h>)
Минимальное значение
sysconf()/pathconf() название (<unistd.h>)
Описание
ARG_MAX
4096
_SC_ARG_MAX
Максимальное количество байтов для аргументов (argv) и для переменных среды (environ), которое может быть предоставлено exec() (см. раздел 6.7 и подраздел 27.2.3)
Не определено
Не определено
_SC_CLK_TCK
Единица измерения для times()
LOGIN_NAME_MAX
9
_SC_LOGIN_NAME_MAX
Максимальный размер имени для входа в систему (включая завершающий нулевой байт)
OPEN_MAX
20
_SC_OPEN_MAX
Максимальное количество файловых дескрипторов, которые могут быть одновременно открыты процессом. Наибольший номер дескриптора, который можно задействовать, на единицу меньше, чем это число (см. раздел 36.2)
NGROUPS_MAX
8
_SC_NGROUPS_MAX
Максимальное количество дополнительных идентификаторов групп, в которые может входить процесс (см. подраздел 9.7.3)
Не определено
1
_SC_PAGESIZE
Размер страницы виртуальной памяти (синонимом является _SC_PAGE_SIZE)
RTSIG_MAX
8
_SC_RTSIG_MAX
Максимальное количество различных сигналов реального времени (см. раздел 22.8)
SIGQUEUE_MAX
32
_SC_SIGQUEUE_MAX
Максимальное количество сигналов реального времени, поставленных в очередь (см. раздел 22.8)
STREAM_MAX
8
_SC_STREAM_MAX
Максимальное количество потоков стандартного ввода-вывода, которые могут быть открыты одновременно
NAME_MAX
14
_PC_NAME_MAX
Максимальное количество байтов в имени файла, не включая завершающий нулевой байт
PATH_MAX
256
_PC_PATH_MAX
Максимальное количество байтов в путевом имени, включая завершающий нулевой байт
PIPE_BUF
512
_PC_PIPE_BUF
Максимальное количество байтов, которые могут быть атомарно записаны в конвейер или в FIFO (см. раздел 44.1)
В первом столбце табл. 11.1 дается название ограничения, которое может быть определено в виде константы в файле <limits.h> для указания ограничения в конкретной реализации. Во втором столбце приводится определенный в SUSv3 минимум для ограничения (также указан в <limits.h>). В большинстве случаев каждое из минимальных значений определяется в качестве константы с префиксом в виде строки _POSIX_. Например, константа _POSIX_RTSIG_MAX (определенная со значением 8) указывает требуемый в SUSv3 минимум, соответствующий константе реализации RTSIG_MAX. В третьем столбце приводится имя константы, которое может быть передано в ходе выполнения программы в функции sysconf() или pathconf() с целью извлечения ограничения, свойственного конкретной реализации. Константы, начинающиеся с _SC_, предназначены для использования с sysconf(), а константы, начинающиеся с _PC_, предназначены для применения с pathconf() и fpathconf().