sysconf
SYSCONF(3) Linux Programmer's Manual SYSCONF(3)
NAME
sysconf - get configuration information at run time
SYNOPSIS
#include <unistd.h>
long sysconf(int name);
DESCRIPTION
POSIX allows an application to test at compile or run time whether cer-
tain options are supported, or what the value is of certain config-
urable constants or limits.
At compile time this is done by including <unistd.h> and/or <limits.h>
and testing the value of certain macros.
At run time, one can ask for numerical values using the present func-
tion sysconf(). One can ask for numerical values that may depend on
the filesystem in which a file resides using fpathconf(3) and path-
conf(3). One can ask for string values using confstr(3).
The values obtained from these functions are system configuration con-
stants. They do not change during the lifetime of a process.
For options, typically, there is a constant _POSIX_FOO that may be de-
fined in <unistd.h>. If it is undefined, one should ask at run time.
If it is defined to -1, then the option is not supported. If it is de-
fined to 0, then relevant functions and headers exist, but one has to
ask at run time what degree of support is available. If it is defined
to a value other than -1 or 0, then the option is supported. Usually
the value (such as 200112L) indicates the year and month of the POSIX
revision describing the option. Glibc uses the value 1 to indicate
support as long as the POSIX revision has not been published yet. The
sysconf() argument will be _SC_FOO. For a list of options, see
posixoptions(7).
For variables or limits, typically, there is a constant _FOO, maybe de-
fined in <limits.h>, or _POSIX_FOO, maybe defined in <unistd.h>. The
constant will not be defined if the limit is unspecified. If the con-
stant is defined, it gives a guaranteed value, and a greater value
might actually be supported. If an application wants to take advantage
of values which may change between systems, a call to sysconf() can be
made. The sysconf() argument will be _SC_FOO.
POSIX.1 variables
We give the name of the variable, the name of the sysconf() argument
used to inquire about its value, and a short description.
First, the POSIX.1 compatible values.
ARG_MAX - _SC_ARG_MAX
The maximum length of the arguments to the exec(3) family of
functions. Must not be less than _POSIX_ARG_MAX (4096).
CHILD_MAX - _SC_CHILD_MAX
The maximum number of simultaneous processes per user ID. Must
not be less than _POSIX_CHILD_MAX (25).
HOST_NAME_MAX - _SC_HOST_NAME_MAX
Maximum length of a hostname, not including the terminating null
byte, as returned by gethostname(2). Must not be less than
_POSIX_HOST_NAME_MAX (255).
LOGIN_NAME_MAX - _SC_LOGIN_NAME_MAX
Maximum length of a login name, including the terminating null
byte. Must not be less than _POSIX_LOGIN_NAME_MAX (9).
NGROUPS_MAX - _SC_NGROUPS_MAX
Maximum number of supplementary group IDs.
clock ticks - _SC_CLK_TCK
The number of clock ticks per second. The corresponding vari-
able is obsolete. It was of course called CLK_TCK. (Note: the
macro CLOCKS_PER_SEC does not give information: it must equal
1000000.)
OPEN_MAX - _SC_OPEN_MAX
The maximum number of files that a process can have open at any
time. Must not be less than _POSIX_OPEN_MAX (20).
PAGESIZE - _SC_PAGESIZE
Size of a page in bytes. Must not be less than 1.
PAGE_SIZE - _SC_PAGE_SIZE
A synonym for PAGESIZE/_SC_PAGESIZE. (Both PAGESIZE and
PAGE_SIZE are specified in POSIX.)
RE_DUP_MAX - _SC_RE_DUP_MAX
The number of repeated occurrences of a BRE permitted by
regexec(3) and regcomp(3). Must not be less than
_POSIX2_RE_DUP_MAX (255).
STREAM_MAX - _SC_STREAM_MAX
The maximum number of streams that a process can have open at
any time. If defined, it has the same value as the standard C
macro FOPEN_MAX. Must not be less than _POSIX_STREAM_MAX (8).
SYMLOOP_MAX - _SC_SYMLOOP_MAX
The maximum number of symbolic links seen in a pathname before
resolution returns ELOOP. Must not be less than _POSIX_SYM-
LOOP_MAX (8).
TTY_NAME_MAX - _SC_TTY_NAME_MAX
The maximum length of terminal device name, including the termi-
nating null byte. Must not be less than _POSIX_TTY_NAME_MAX
(9).
TZNAME_MAX - _SC_TZNAME_MAX
The maximum number of bytes in a timezone name. Must not be
less than _POSIX_TZNAME_MAX (6).
_POSIX_VERSION - _SC_VERSION
indicates the year and month the POSIX.1 standard was approved
in the format YYYYMML; the value 199009L indicates the Sept.
1990 revision.
POSIX.2 variables
Next, the POSIX.2 values, giving limits for utilities.
BC_BASE_MAX - _SC_BC_BASE_MAX
indicates the maximum obase value accepted by the bc(1) utility.
BC_DIM_MAX - _SC_BC_DIM_MAX
indicates the maximum value of elements permitted in an array by
bc(1).
BC_SCALE_MAX - _SC_BC_SCALE_MAX
indicates the maximum scale value allowed by bc(1).
BC_STRING_MAX - _SC_BC_STRING_MAX
indicates the maximum length of a string accepted by bc(1).
COLL_WEIGHTS_MAX - _SC_COLL_WEIGHTS_MAX
indicates the maximum numbers of weights that can be assigned to
an entry of the LC_COLLATE order keyword in the locale defini-
tion file,
EXPR_NEST_MAX - _SC_EXPR_NEST_MAX
is the maximum number of expressions which can be nested within
parentheses by expr(1).
LINE_MAX - _SC_LINE_MAX
The maximum length of a utility's input line, either from stan-
dard input or from a file. This includes space for a trailing
newline.
RE_DUP_MAX - _SC_RE_DUP_MAX
The maximum number of repeated occurrences of a regular expres-
sion when the interval notation \{m,n\} is used.
POSIX2_VERSION - _SC_2_VERSION
indicates the version of the POSIX.2 standard in the format of
YYYYMML.
POSIX2_C_DEV - _SC_2_C_DEV
indicates whether the POSIX.2 C language development facilities
are supported.
POSIX2_FORT_DEV - _SC_2_FORT_DEV
indicates whether the POSIX.2 FORTRAN development utilities are
supported.
POSIX2_FORT_RUN - _SC_2_FORT_RUN
indicates whether the POSIX.2 FORTRAN run-time utilities are
supported.
_POSIX2_LOCALEDEF - _SC_2_LOCALEDEF
indicates whether the POSIX.2 creation of locates via lo-
caledef(1) is supported.
POSIX2_SW_DEV - _SC_2_SW_DEV
indicates whether the POSIX.2 software development utilities op-
tion is supported.
These values also exist, but may not be standard.
- _SC_PHYS_PAGES
The number of pages of physical memory. Note that it is possi-
ble for the product of this value and the value of _SC_PAGESIZE
to overflow.
- _SC_AVPHYS_PAGES
The number of currently available pages of physical memory.
- _SC_NPROCESSORS_CONF
The number of processors configured. See also
get_nprocs_conf(3).
- _SC_NPROCESSORS_ONLN
The number of processors currently online (available). See also
get_nprocs_conf(3).
RETURN VALUE
The return value of sysconf() is one of the following:
* On error, -1 is returned and errno is set to indicate the cause of
the error (for example, EINVAL, indicating that name is invalid).
* If name corresponds to a maximum or minimum limit, and that limit is
indeterminate, -1 is returned and errno is not changed. (To distin-
guish an indeterminate limit from an error, set errno to zero before
the call, and then check whether errno is nonzero when -1 is re-
turned.)
* If name corresponds to an option, a positive value is returned if
the option is supported, and -1 is returned if the option is not
supported.
* Otherwise, the current value of the option or limit is returned.
This value will not be more restrictive than the corresponding value
that was described to the application in <unistd.h> or <limits.h>
when the application was compiled.
ERRORS
EINVAL name is invalid.
ATTRIBUTES
For an explanation of the terms used in this section, see at-
tributes(7).
+----------+---------------+-------------+
|Interface | Attribute | Value |
+----------+---------------+-------------+
|sysconf() | Thread safety | MT-Safe env |
+----------+---------------+-------------+
CONFORMING TO
POSIX.1-2001, POSIX.1-2008.
BUGS
It is difficult to use ARG_MAX because it is not specified how much of
the argument space for exec(3) is consumed by the user's environment
variables.
Some returned values may be huge; they are not suitable for allocating
memory.
SEE ALSO
bc(1), expr(1), getconf(1), locale(1), confstr(3), fpathconf(3), path-
conf(3), posixoptions(7)
COLOPHON
This page is part of release 5.05 of the Linux man-pages project. A
description of the project, information about reporting bugs, and the
latest version of this page, can be found at
https://www.kernel.org/doc/man-pages/.
GNU 2019-05-09 SYSCONF(3)
Man Pages Copyright Respective Owners. Site Copyright (C) 1994 - 2024
Hurricane Electric.
All Rights Reserved.