ИМЯ
sysconf -
считывает
информацию
о
настройках
во время
работы
системы
ОБЗОР
#include <unistd.h>
long sysconf(int name);
ОПИСАНИЕ
POSIX
позволяет
приложению
проверять
наличие
поддержки
определённых
параметров
на стадии
компиляции
или
выполнения
или
получать
значения
некоторых
настраиваемых
констант
или
ограничений.
На стадии
компиляции
это
осуществляется
при помощи
включения
<unistd.h> и/или
<limits.h> и
проверки
значений
определённых
макросов.
Во время
выполнения
можно
запрашивать
числовые
значение
посредством
функции sysconf().
Можно
запросить
числовые
значения,
которые
могут
зависеть
файловой
системы, в
которой
находится
файл, с
помощью
вызовов fpathconf(3)
и pathconf(3).
Строковые
значения
можно
запрашивать
с помощью
confstr(3).
Значения,
полученные
с помощью
этих
функций,
являются
системными
настроечными
константами.
Они не
изменятся
пока
выполняется
процесс.
Для
параметров,
как
правило,
используются
константы
вида _POSIX_FOO,
которые
могут быть
определены
в <unistd.h>. Если
параметр
не
определён,
то его
можно
запросить
во время
выполнения.
Если он
определён
со
значением -1,
то этот
параметр
не
поддерживается.
Если его
значение
равно 0, то
соответствующие
функции и
заголовочные
файлы
существуют,
но нужно во
время
выполнения
запрашивать
степень
поддержки.
Если он
определён
со
значениями
не -1 и 0, то
параметр
поддерживается.
Обычно
значение
(например 200112L)
отражает
год и месяц
версии POSIX, в
которой
описан
параметр. В
glibc
используется
значение 1,
означающее,
что
поддержка
в версии POSIX
пока не
опубликована.
В этом
случае
аргумент
sysconf() будет
выглядеть
как _SC_FOO.
Список
параметров
смотрите в
posixoptions(7).
Для
переменных
или
ограничений,
как
правило,
используются
константы
вида _FOO,
возможно
определённые
в <limits.h>, или
_POSIX_FOO,
возможно
определённые
в <unistd.h>.
Константа
не будет
определена,
если не
указано
ограничение.
Если
константа
определена,
то это даёт
гарантированное
значение и
в
реальности
может
поддерживаться
большее
значение.
Если
приложение
хочет
получить
преимущества
учёта
значений,
которые
могут быть
разными в
системах,
то этого
можно
достичь с
помощью sysconf().
В этом
случае
аргумент
sysconf() будет
выглядеть
как _SC_FOO.
Переменные
POSIX.1
Далее
показаны
имя
переменной,
имя
аргумента
sysconf(),
используемого
для опроса
этого
значения, и
короткое
описание.
Сначала
совместимые
с POSIX.1
значения.
- ARG_MAX -
_SC_ARG_MAX
- Максимально
допустимая
длина
аргументов
для
семейства
функций exec(3).
Должна
быть не
меньше _POSIX_ARG_MAX
(4096).
- CHILD_MAX -
_SC_CHILD_MAX
- Максимально
допустимое
количество
одновременно
работающих
процессов
для
каждого
пользовательского
ID. Должно
быть не
меньше _POSIX_CHILD_MAX
(25).
- HOST_NAME_MAX
- _SC_HOST_NAME_MAX
- Максимально
допустимая
длина
имени узла
(без
завершающего
null-байта),
возвращаемая
gethostname(2). Должна
быть не
меньше
_POSIX_HOST_NAME_MAX (255).
- LOGIN_NAME_MAX
- _SC_LOGIN_NAME_MAX
- Максимально
допустимая
длина
имени
пользователя
(включая
завершающий
null-байт).
Должна
быть не
меньше
_POSIX_LOGIN_NAME_MAX (9).
- NGROUPS_MAX
- _SC_NGROUPS_MAX
- Максимальное
количество
идентификаторов
дополнительных
групп.
- такты
часов - _SC_CLK_TCK
- Количество
тактов
часов в
секунду.
Соответствующая
переменная
устарела.
Ранее она
называлась
CLK_TCK
(примечание:
макрос CLOCKS_PER_SEC
не даёт
необходимую
информацию,
он должен
быть равен
1000000).
- OPEN_MAX -
_SC_OPEN_MAX
- Максимально
допустимое
количество
файлов,
которое
одновременно
может
открыть
процесс.
Должно
быть не
меньше _POSIX_OPEN_MAX
(20).
- PAGESIZE -
_SC_PAGESIZE
- Размер
страницы в
байтах.
Должен
быть не
меньше 1 (в
некоторых
системах
вместо
этого
используется
PAGE_SIZE).
- RE_DUP_MAX
- _SC_RE_DUP_MAX
- Количество
повторяемых
совпадений
BRE,
разрешённых
regexec(3) и regcomp(3).
Должно
быть не
меньше _POSIX2_RE_DUP_MAX
(255).
- STREAM_MAX
- _SC_STREAM_MAX
- Максимально
допустимое
количество
потоков,
которое
может
одновременно
открывать
процесс.
Если
определёно,
то оно
имеет то же
значение,
что и
стандартный
макрос C FOPEN_MAX.
Должно
быть не
меньше _POSIX_STREAM_MAX
(8).
- SYMLOOP_MAX
- _SC_SYMLOOP_MAX
- Максимальное
количество
символических
ссылок,
допустимое
при
разрешении
имени пути
до того,
как не
будет
возвращена
ошибка ELOOP.
Должно
быть не
меньше _POSIX_SYMLOOP_MAX
(8).
- TTY_NAME_MAX
- _SC_TTY_NAME_MAX
- Максимально
допустимая
длина
имени
устройства
терминала,
включая
завершающий
байт null.
Должна
быть не
меньше
_POSIX_TTY_NAME_MAX (9).
- TZNAME_MAX
- _SC_TZNAME_MAX
- Максимально
количество
байт в
имени
часового
пояса.
Должно
быть не
меньше _POSIX_TZNAME_MAX
(6).
- _POSIX_VERSION - _SC_VERSION
- Отображает
год и
месяц, в
котором
был
утверждён
стандарт POSIX.1,
в формате
YYYYMML;
значение
199009L
указывает
на версию
сентября 1990
года.
Переменные
POSIX.2
Далее
перечислены
значения POSIX.2,
задающие
ограничения
для
утилит.
- BC_BASE_MAX
- _SC_BC_BASE_MAX
- Отображает
максимальное
значение
obase,
принимаемое
утилитой
bc(1).
- BC_DIM_MAX
- _SC_BC_DIM_MAX
- Отображает
максимальное
количество
элементов,
разрешённых
в массиве в
bc(1).
- BC_SCALE_MAX
- _SC_BC_SCALE_MAX
- Отображает
максимальное
значение
scale, которое
может
принимать
bc(1).
- BC_STRING_MAX
- _SC_BC_STRING_MAX
- Отображает
максимальную
длину
строки,
которую
может
принимать
bc(1).
- COLL_WEIGHTS_MAX
- _SC_COLL_WEIGHTS_MAX
- Отображает
максимальное
количество
весов,
которые
можно
назначить
элементу
ключевого
слова LC_COLLATE order в
файле
определения
локали
- EXPR_NEST_MAX
- _SC_EXPR_NEST_MAX
- Максимальное
количество
выражений,
которые
могут быть
вложены
внутри
скобок expr(1).
- LINE_MAX -
_SC_LINE_MAX
- Максимальная
длина
входной
строки
утилит, или
из
стандартного
ввода или
из файла.
Учитывается
пробел для
символа
новой
строки в
конце.
- RE_DUP_MAX
- _SC_RE_DUP_MAX
- Максимальное
количество
повторяемых
совпадений
регулярного
выражения
при
указании
интервала
в нотации
\{m,n\}
- POSIX2_VERSION
- _SC_2_VERSION
- Отображает
версию
стандарта
POSIX.2 в формате
YYYYMML.
- POSIX2_C_DEV
- _SC_2_C_DEV
- Отображает,
поддерживаются
ли
средства
разработки
языка Си POSIX.2.
- POSIX2_FORT_DEV
- _SC_2_FORT_DEV
- Отображает,
поддерживаются
ли
средства
разработки
языка FORTRAN POSIX.2.
- POSIX2_FORT_RUN
- _SC_2_FORT_RUN
- Отображает,
поддерживаются
ли утилиты
времени
выполнения
языка FORTRAN POSIX.2.
- _POSIX2_LOCALEDEF - _SC_2_LOCALEDEF
- Отображает,
поддерживается
создание
локалей с
помощью
localedef(1)
согласно
POSIX.2.
- POSIX2_SW_DEV
- _SC_2_SW_DEV
- Отображает,
поддерживаются
ли
параметры
утилит
разработки
ПО POSIX.2.
Также
могут
существовать
следующие
значения,
однако они
могут быть
не
стандартизированы.
-
- _SC_PHYS_PAGES
- Количество
страниц
физической
памяти.
Заметим,
что
возможно
переполнение
при
перемножении
этого
значения и
_SC_PAGESIZE.
-
- _SC_AVPHYS_PAGES
- Количество
доступных
в данный
момент
страниц
физической
памяти.
-
- _SC_NPROCESSORS_CONF
- Количество
настроенных
процессоров.
Смотрите
также get_nprocs_conf(3).
-
- _SC_NPROCESSORS_ONLN
- Количество
включенных
(доступных)
процессоров.
Смотрите
также get_nprocs_conf(3).
ВОЗВРАЩАЕМОЕ
ЗНАЧЕНИЕ
Возвращаемым
значением
sysconf() может
быть одно
из:
- При ошибке
возвращается
-1, а в errno
содержится
код ошибки
(например,
EINVAL
означает,
что
некорректно
name).
- Если name
соответствует
максимальному
или
минимальному
ограничителю
и этот
ограничитель
не
определён,
то
возвращается
-1 и errno не
изменяется
(чтобы
отличать
неопределённый
ограничитель
от ошибки,
сбросьте
errno в ноль
пере
вызовом, а
затем
проверьте,
что errno не
равно нулю,
если
возвращается
-1).
- Если name
соответствует
параметру,
то
возвращается
положительное
значение,
если
параметр
поддерживается
и -1, если
параметр
не
поддерживается.
- В
противном
случае
возвращается
текущее
значение
параметра
или
ограничителя.
Это
значение
будет не
более
ограничивающем
чем
соответствующее
значение,
которое
было
показано
приложению
в <unistd.h> или
<limits.h> при
компиляции.
ОШИБКИ
- EINVAL
- Неверное
значение
name.
АТРИБУТЫ
Описание
терминов
данного
раздела
смотрите в
attributes(7).
Интерфейс |
Атрибут |
Значение |
sysconf() |
Безвредность
в нитях |
MT-Safe env |
СООТВЕТСТВИЕ
СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.
ДЕФЕКТЫ
Трудно
использовать
ARG_MAX, так как
не указано
как много
места под
аргумент
exec(3)
потребляется
пользовательскими
переменными
окружения.
Некоторые
возвращаемые
значения
могут быть
огромны;
соответствующие
им объекты
невозможно
разместить
в памяти.