Выбрать главу

Примером изменяемого значения путевого имени может послужить ограничение 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().