sysconf - считывает информацию о настройках во время работы системы
sysconf(3)
считывает информацию о настройках во время работы системы
ОБЗОР
#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
Количество настроенных процессоров.
-
_SC_NPROCESSORS_ONLN
Количество процессоров онлайн (доступных).
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Если
name некорректно, то возвращается -1 и
errno назначается
EINVAL. В противном случае возвращается значение системного ресурса и
errno не изменяется. Для параметров возвращается положительное значение,
если параметр доступен, или -1, если нет. Для ограничений -1 означает, что
ограничение не определено.
АТРИБУТЫ
Описание терминов данного раздела смотрите в
attributes(7).
Интерфейс Атрибут Значение
sysconf()
безвредность в потоках: безвредно (MT-Safe env)
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.
ДЕФЕКТЫ
Трудно использовать
ARG_MAX, так как не указано как много места под
аргумент
exec(3) потребляется пользовательскими переменными окружения.
Некоторые возвращаемые значения могут быть огромны; соответствующие им
объекты невозможно разместить в памяти.