@node System Configuration, Cryptographic Functions, System Management, Top
@c %MENU% Parameters describing operating system limits
@chapter System Configuration Parameters

The functions and macros listed in this chapter give information about
configuration parameters of the operating system---for example, capacity
limits, presence of optional POSIX features, and the default path for
executable files (@pxref{String Parameters}).

@menu
* General Limits::           Constants and functions that describe
				various process-related limits that have
				one uniform value for any given machine.
* System Options::           Optional POSIX features.
* Version Supported::        Version numbers of POSIX.1 and POSIX.2.
* Sysconf::                  Getting specific configuration values
                                of general limits and system options.
* Minimums::                 Minimum values for general limits.

* Limits for Files::         Size limitations that pertain to individual files.
                                These can vary between file systems
                                or even from file to file.
* Options for Files::        Optional features that some files may support.
* File Minimums::            Minimum values for file limits.
* Pathconf::                 Getting the limit values for a particular file.

* Utility Limits::           Capacity limits of some POSIX.2 utility programs.
* Utility Minimums::         Minimum allowable values of those limits.

* String Parameters::        Getting the default search path.
@end menu

@node General Limits
@section General Capacity Limits
@cindex POSIX capacity limits
@cindex limits, POSIX
@cindex capacity limits, POSIX

The POSIX.1 and POSIX.2 standards specify a number of parameters that
describe capacity limitations of the system.  These limits can be fixed
constants for a given operating system, or they can vary from machine to
machine.  For example, some limit values may be configurable by the
system administrator, either at run time or by rebuilding the kernel,
and this should not require recompiling application programs.

@pindex limits.h
Each of the following limit parameters has a macro that is defined in
@file{limits.h} only if the system has a fixed, uniform limit for the
parameter in question.  If the system allows different file systems or
files to have different limits, then the macro is undefined; use
@code{sysconf} to find out the limit that applies at a particular time
on a particular machine.  @xref{Sysconf}.

Each of these parameters also has another macro, with a name starting
with @samp{_POSIX}, which gives the lowest value that the limit is
allowed to have on @emph{any} POSIX system.  @xref{Minimums}.

@cindex limits, program argument size
@deftypevr Macro int ARG_MAX
@standards{POSIX.1, limits.h}
If defined, the unvarying maximum combined length of the @var{argv} and
@var{environ} arguments that can be passed to the @code{exec} functions.
@end deftypevr

@cindex limits, number of processes
@deftypevr Macro int CHILD_MAX
@standards{POSIX.1, limits.h}
If defined, the unvarying maximum number of processes that can exist
with the same real user ID at any one time.  In BSD and GNU, this is
controlled by the @code{RLIMIT_NPROC} resource limit; @pxref{Limits on
Resources}.
@end deftypevr

@cindex limits, number of open files
@deftypevr Macro int OPEN_MAX
@standards{POSIX.1, limits.h}
If defined, the unvarying maximum number of files that a single process
can have open simultaneously.  In BSD and GNU, this is controlled
by the @code{RLIMIT_NOFILE} resource limit; @pxref{Limits on Resources}.
@end deftypevr

@deftypevr Macro int STREAM_MAX
@standards{POSIX.1, limits.h}
If defined, the unvarying maximum number of streams that a single
process can have open simultaneously.  @xref{Opening Streams}.
@end deftypevr

@cindex limits, time zone name length
@deftypevr Macro int TZNAME_MAX
@standards{POSIX.1, limits.h}
If defined, the unvarying maximum length of a time zone name.
@xref{Time Zone Functions}.
@end deftypevr

These limit macros are always defined in @file{limits.h}.

@cindex limits, number of supplementary group IDs
@deftypevr Macro int NGROUPS_MAX
@standards{POSIX.1, limits.h}
The maximum number of supplementary group IDs that one process can have.

The value of this macro is actually a lower bound for the maximum.  That
is, you can count on being able to have that many supplementary group
IDs, but a particular machine might let you have even more.  You can use
@code{sysconf} to see whether a particular machine will let you have
more (@pxref{Sysconf}).
@end deftypevr

@deftypevr Macro ssize_t SSIZE_MAX
@standards{POSIX.1, limits.h}
The largest value that can fit in an object of type @code{ssize_t}.
Effectively, this is the limit on the number of bytes that can be read
or written in a single operation.

This macro is defined in all POSIX systems because this limit is never
configurable.
@end deftypevr

@deftypevr Macro int RE_DUP_MAX
@standards{POSIX.2, limits.h}
The largest number of repetitions you are guaranteed is allowed in the
construct @samp{\@{@var{min},@var{max}\@}} in a regular expression.

The value of this macro is actually a lower bound for the maximum.  That
is, you can count on being able to have that many repetitions, but a
particular machine might let you have even more.  You can use
@code{sysconf} to see whether a particular machine will let you have
more (@pxref{Sysconf}).  And even the value that @code{sysconf} tells
you is just a lower bound---larger values might work.

This macro is defined in all POSIX.2 systems, because POSIX.2 says it
should always be defined even if there is no specific imposed limit.
@end deftypevr

@node System Options
@section Overall System Options
@cindex POSIX optional features
@cindex optional POSIX features

POSIX defines certain system-specific options that not all POSIX systems
support.  Since these options are provided in the kernel, not in the
library, simply using @theglibc{} does not guarantee any of these
features are supported; it depends on the system you are using.

@pindex unistd.h
You can test for the availability of a given option using the macros in
this section, together with the function @code{sysconf}.  The macros are
defined only if you include @file{unistd.h}.

For the following macros, if the macro is defined in @file{unistd.h},
then the option is supported.  Otherwise, the option may or may not be
supported; use @code{sysconf} to find out.  @xref{Sysconf}.

@deftypevr Macro int _POSIX_JOB_CONTROL
@standards{POSIX.1, unistd.h}
If this symbol is defined, it indicates that the system supports job
control.  Otherwise, the implementation behaves as if all processes
within a session belong to a single process group.  @xref{Job Control}.
@end deftypevr

@deftypevr Macro int _POSIX_SAVED_IDS
@standards{POSIX.1, unistd.h}
If this symbol is defined, it indicates that the system remembers the
effective user and group IDs of a process before it executes an
executable file with the set-user-ID or set-group-ID bits set, and that
explicitly changing the effective user or group IDs back to these values
is permitted.  If this option is not defined, then if a nonprivileged
process changes its effective user or group ID to the real user or group
ID of the process, it can't change it back again.  @xref{Enable/Disable
Setuid}.
@end deftypevr

For the following macros, if the macro is defined in @file{unistd.h},
then its value indicates whether the option is supported.  A value of
@code{-1} means no, and any other value means yes.  If the macro is not
defined, then the option may or may not be supported; use @code{sysconf}
to find out.  @xref{Sysconf}.

@deftypevr Macro int _POSIX2_C_DEV
@standards{POSIX.2, unistd.h}
If this symbol is defined, it indicates that the system has the POSIX.2
C compiler command, @code{c89}.  @Theglibc{} always defines this
as @code{1}, on the assumption that you would not have installed it if
you didn't have a C compiler.
@end deftypevr

@deftypevr Macro int _POSIX2_FORT_DEV
@standards{POSIX.2, unistd.h}
If this symbol is defined, it indicates that the system has the POSIX.2
Fortran compiler command, @code{fort77}.  @Theglibc{} never
defines this, because we don't know what the system has.
@end deftypevr

@deftypevr Macro int _POSIX2_FORT_RUN
@standards{POSIX.2, unistd.h}
If this symbol is defined, it indicates that the system has the POSIX.2
@code{asa} command to interpret Fortran carriage control.  @Theglibc{}
never defines this, because we don't know what the system has.
@end deftypevr

@deftypevr Macro int _POSIX2_LOCALEDEF
@standards{POSIX.2, unistd.h}
If this symbol is defined, it indicates that the system has the POSIX.2
@code{localedef} command.  @Theglibc{} never defines this, because
we don't know what the system has.
@end deftypevr

@deftypevr Macro int _POSIX2_SW_DEV
@standards{POSIX.2, unistd.h}
If this symbol is defined, it indicates that the system has the POSIX.2
commands @code{ar}, @code{make}, and @code{strip}.  @Theglibc{}
always defines this as @code{1}, on the assumption that you had to have
@code{ar} and @code{make} to install the library, and it's unlikely that
@code{strip} would be absent when those are present.
@end deftypevr

@node Version Supported
@section Which Version of POSIX is Supported

@deftypevr Macro {long int} _POSIX_VERSION
@standards{POSIX.1, unistd.h}
This constant represents the version of the POSIX.1 standard to which
the implementation conforms.  For an implementation conforming to the
1995 POSIX.1 standard, the value is the integer @code{199506L}.

@code{_POSIX_VERSION} is always defined (in @file{unistd.h}) in any
POSIX system.

@strong{Usage Note:} Don't try to test whether the system supports POSIX
by including @file{unistd.h} and then checking whether
@code{_POSIX_VERSION} is defined.  On a non-POSIX system, this will
probably fail because there is no @file{unistd.h}.  We do not know of
@emph{any} way you can reliably test at compilation time whether your
target system supports POSIX or whether @file{unistd.h} exists.
@end deftypevr

@deftypevr Macro {long int} _POSIX2_C_VERSION
@standards{POSIX.2, unistd.h}
This constant represents the version of the POSIX.2 standard which the
library and system kernel support.  We don't know what value this will
be for the first version of the POSIX.2 standard, because the value is
based on the year and month in which the standard is officially adopted.

The value of this symbol says nothing about the utilities installed on
the system.

@strong{Usage Note:} You can use this macro to tell whether a POSIX.1
system library supports POSIX.2 as well.  Any POSIX.1 system contains
@file{unistd.h}, so include that file and then test @code{defined
(_POSIX2_C_VERSION)}.
@end deftypevr

@node Sysconf
@section Using @code{sysconf}

When your system has configurable system limits, you can use the
@code{sysconf} function to find out the value that applies to any
particular machine.  The function and the associated @var{parameter}
constants are declared in the header file @file{unistd.h}.

@menu
* Sysconf Definition::        Detailed specifications of @code{sysconf}.
* Constants for Sysconf::     The list of parameters @code{sysconf} can read.
* Examples of Sysconf::       How to use @code{sysconf} and the parameter
				 macros properly together.
@end menu

@node Sysconf Definition
@subsection Definition of @code{sysconf}

@deftypefun {long int} sysconf (int @var{parameter})
@standards{POSIX.1, unistd.h}
@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
@c Some parts of the implementation open /proc and /sys files and dirs
@c to collect system details, using fd and stream I/O depending on the
@c case.  The returned max value may change over time for NPROCS,
@c NPROCS_CONF, PHYS_PAGES, AVPHYS_PAGES, NGROUPS_MAX, SIGQUEUE_MAX,
@c depending on variable values read from /proc at each call, and from
@c rlimit-obtained values CHILD_MAX, OPEN_MAX, ARG_MAX, SIGQUEUE_MAX.
This function is used to inquire about runtime system parameters.  The
@var{parameter} argument should be one of the @samp{_SC_} symbols listed
below.

The normal return value from @code{sysconf} is the value you requested.
A value of @code{-1} is returned both if the implementation does not
impose a limit, and in case of an error.

The following @code{errno} error conditions are defined for this function:

@table @code
@item EINVAL
The value of the @var{parameter} is invalid.
@end table
@end deftypefun

@node Constants for Sysconf
@subsection Constants for @code{sysconf} Parameters

Here are the symbolic constants for use as the @var{parameter} argument
to @code{sysconf}.  The values are all integer constants (more
specifically, enumeration type values).

@vtable @code
@item _SC_ARG_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{ARG_MAX}.

@item _SC_CHILD_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{CHILD_MAX}.

@item _SC_OPEN_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{OPEN_MAX}.

@item _SC_STREAM_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{STREAM_MAX}.

@item _SC_TZNAME_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{TZNAME_MAX}.

@item _SC_NGROUPS_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{NGROUPS_MAX}.

@item _SC_JOB_CONTROL
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_JOB_CONTROL}.

@item _SC_SAVED_IDS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SAVED_IDS}.

@item _SC_VERSION
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_VERSION}.

@item _SC_CLK_TCK
@standards{POSIX.1, unistd.h}
Inquire about the number of clock ticks per second; @pxref{CPU Time}.
The corresponding parameter @code{CLK_TCK} is obsolete.

@item _SC_CHARCLASS_NAME_MAX
@standards{GNU, unistd.h}
Inquire about the parameter corresponding to maximal length allowed for
a character class name in an extended locale specification.  These
extensions are not yet standardized and so this option is not standardized
as well.

@item _SC_REALTIME_SIGNALS
@standards{POSIX.1, unistdh.h}
Inquire about the parameter corresponding to @code{_POSIX_REALTIME_SIGNALS}.

@item _SC_PRIORITY_SCHEDULING
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PRIORITY_SCHEDULING}.

@item _SC_TIMERS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_TIMERS}.

@item _SC_ASYNCHRONOUS_IO
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_ASYNCHRONOUS_IO}.

@item _SC_PRIORITIZED_IO
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PRIORITIZED_IO}.

@item _SC_SYNCHRONIZED_IO
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SYNCHRONIZED_IO}.

@item _SC_FSYNC
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_FSYNC}.

@item _SC_MAPPED_FILES
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MAPPED_FILES}.

@item _SC_MEMLOCK
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MEMLOCK}.

@item _SC_MEMLOCK_RANGE
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MEMLOCK_RANGE}.

@item _SC_MEMORY_PROTECTION
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MEMORY_PROTECTION}.

@item _SC_MESSAGE_PASSING
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MESSAGE_PASSING}.

@item _SC_SEMAPHORES
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SEMAPHORES}.

@item _SC_SHARED_MEMORY_OBJECTS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to@*
@code{_POSIX_SHARED_MEMORY_OBJECTS}.

@item _SC_AIO_LISTIO_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_AIO_LISTIO_MAX}.

@item _SC_AIO_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_AIO_MAX}.

@item _SC_AIO_PRIO_DELTA_MAX
@standards{POSIX.1, unistd.h}
Inquire about the value by which a process can decrease its asynchronous I/O
priority level from its own scheduling priority.  This corresponds to the
run-time invariant value @code{AIO_PRIO_DELTA_MAX}.

@item _SC_DELAYTIMER_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_DELAYTIMER_MAX}.

@item _SC_MQ_OPEN_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MQ_OPEN_MAX}.

@item _SC_MQ_PRIO_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_MQ_PRIO_MAX}.

@item _SC_RTSIG_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_RTSIG_MAX}.

@item _SC_SEM_NSEMS_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SEM_NSEMS_MAX}.

@item _SC_SEM_VALUE_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SEM_VALUE_MAX}.

@item _SC_SIGQUEUE_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SIGQUEUE_MAX}.

@item _SC_TIMER_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_TIMER_MAX}.

@item _SC_PII
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII}.

@item _SC_PII_XTI
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_XTI}.

@item _SC_PII_SOCKET
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_SOCKET}.

@item _SC_PII_INTERNET
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET}.

@item _SC_PII_OSI
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_OSI}.

@item _SC_SELECT
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_SELECT}.

@item _SC_UIO_MAXIOV
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_UIO_MAXIOV}.

@item _SC_PII_INTERNET_STREAM
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET_STREAM}.

@item _SC_PII_INTERNET_DGRAM
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_INTERNET_DGRAM}.

@item _SC_PII_OSI_COTS
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_COTS}.

@item _SC_PII_OSI_CLTS
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_CLTS}.

@item _SC_PII_OSI_M
@standards{POSIX.1g, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_PII_OSI_M}.

@item _SC_T_IOV_MAX
@standards{POSIX.1g, unistd.h}
Inquire about the value associated with the @code{T_IOV_MAX}
variable.

@item _SC_THREADS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREADS}.

@item _SC_THREAD_SAFE_FUNCTIONS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to@*
@code{_POSIX_THREAD_SAFE_FUNCTIONS}.

@item _SC_GETGR_R_SIZE_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_GETGR_R_SIZE_MAX}.

@item _SC_GETPW_R_SIZE_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_GETPW_R_SIZE_MAX}.

@item _SC_LOGIN_NAME_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_LOGIN_NAME_MAX}.

@item _SC_TTY_NAME_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_TTY_NAME_MAX}.

@item _SC_THREAD_DESTRUCTOR_ITERATIONS
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to
@code{_POSIX_THREAD_DESTRUCTOR_ITERATIONS}.

@item _SC_THREAD_KEYS_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREAD_KEYS_MAX}.

@item _SC_THREAD_STACK_MIN
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREAD_STACK_MIN}.

@item _SC_THREAD_THREADS_MAX
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREAD_THREADS_MAX}.

@item _SC_THREAD_ATTR_STACKADDR
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to@*a
@code{_POSIX_THREAD_ATTR_STACKADDR}.

@item _SC_THREAD_ATTR_STACKSIZE
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to@*
@code{_POSIX_THREAD_ATTR_STACKSIZE}.

@item _SC_THREAD_PRIORITY_SCHEDULING
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to
@code{_POSIX_THREAD_PRIORITY_SCHEDULING}.

@item _SC_THREAD_PRIO_INHERIT
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREAD_PRIO_INHERIT}.

@item _SC_THREAD_PRIO_PROTECT
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to @code{_POSIX_THREAD_PRIO_PROTECT}.

@item _SC_THREAD_PROCESS_SHARED
@standards{POSIX.1, unistd.h}
Inquire about the parameter corresponding to
@code{_POSIX_THREAD_PROCESS_SHARED}.

@item _SC_2_C_DEV
@standards{POSIX.2, unistd.h}
Inquire about whether the system has the POSIX.2 C compiler command,
@code{c89}.

@item _SC_2_FORT_DEV
@standards{POSIX.2, unistd.h}
Inquire about whether the system has the POSIX.2 Fortran compiler
command, @code{fort77}.

@item _SC_2_FORT_RUN
@standards{POSIX.2, unistd.h}
Inquire about whether the system has the POSIX.2 @code{asa} command to
interpret Fortran carriage control.

@item _SC_2_LOCALEDEF
@standards{POSIX.2, unistd.h}
Inquire about whether the system has the POSIX.2 @code{localedef}
command.

@item _SC_2_SW_DEV
@standards{POSIX.2, unistd.h}
Inquire about whether the system has the POSIX.2 commands @code{ar},
@code{make}, and @code{strip}.

@item _SC_BC_BASE_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum value of @code{obase} in the @code{bc}
utility.

@item _SC_BC_DIM_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum size of an array in the @code{bc}
utility.

@item _SC_BC_SCALE_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum value of @code{scale} in the @code{bc}
utility.

@item _SC_BC_STRING_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum size of a string constant in the
@code{bc} utility.

@item _SC_COLL_WEIGHTS_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum number of weights that can necessarily
be used in defining the collating sequence for a locale.

@item _SC_EXPR_NEST_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum number of expressions nested within
parentheses when using the @code{expr} utility.

@item _SC_LINE_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum size of a text line that the POSIX.2 text
utilities can handle.

@item _SC_EQUIV_CLASS_MAX
@standards{POSIX.2, unistd.h}
Inquire about the maximum number of weights that can be assigned to an
entry of the @code{LC_COLLATE} category @samp{order} keyword in a locale
definition.  @Theglibc{} does not presently support locale
definitions.

@item _SC_VERSION
@standards{POSIX.2, unistd.h}
Inquire about the version number of POSIX.1 that the library and kernel
support.

@item _SC_2_VERSION
@standards{POSIX.2, unistd.h}
Inquire about the version number of POSIX.2 that the system utilities
support.

@item _SC_PAGESIZE
@standards{GNU, unistd.h}
Inquire about the virtual memory page size of the machine.
@code{getpagesize} returns the same value (@pxref{Query Memory Parameters}).

@item _SC_NPROCESSORS_CONF
@standards{GNU, unistd.h}
Inquire about the number of configured processors.

@item _SC_NPROCESSORS_ONLN
@standards{GNU, unistd.h}
Inquire about the number of processors online.

@item _SC_PHYS_PAGES
@standards{GNU, unistd.h}
Inquire about the number of physical pages in the system.

@item _SC_AVPHYS_PAGES
@standards{GNU, unistd.h}
Inquire about the number of available physical pages in the system.

@item _SC_ATEXIT_MAX
@standards{GNU, unistd.h}
Inquire about the number of functions which can be registered as termination
functions for @code{atexit}; @pxref{Cleanups on Exit}.

@item _SC_LEVEL1_ICACHE_SIZE
@standards{GNU, unistd.h}
Inquire about the size of the Level 1 instruction cache.

@item _SC_LEVEL1_ICACHE_ASSOC
@standards{GNU, unistd.h}
Inquire about the associativity of the Level 1 instruction cache.

@item _SC_LEVEL1_ICACHE_LINESIZE
@standards{GNU, unistd.h}
Inquire about the line length of the Level 1 instruction cache.

On aarch64, the cache line size returned is the minimum instruction cache line
size observable by userspace.  This is typically the same as the L1 icache
size but on some cores it may not be so.  However, it is specified in the
architecture that operations such as cache line invalidation are consistent
with the size reported with this variable.

@item _SC_LEVEL1_DCACHE_SIZE
@standards{GNU, unistd.h}
Inquire about the size of the Level 1 data cache.

@item _SC_LEVEL1_DCACHE_ASSOC
@standards{GNU, unistd.h}
Inquire about the associativity of the Level 1 data cache.

@item _SC_LEVEL1_DCACHE_LINESIZE
@standards{GNU, unistd.h}
Inquire about the line length of the Level 1 data cache.

On aarch64, the cache line size returned is the minimum data cache line size
observable by userspace.  This is typically the same as the L1 dcache size but
on some cores it may not be so.  However, it is specified in the architecture
that operations such as cache line invalidation are consistent with the size
reported with this variable.

@item _SC_LEVEL2_CACHE_SIZE
@standards{GNU, unistd.h}
Inquire about the size of the Level 2 cache.

@item _SC_LEVEL2_CACHE_ASSOC
@standards{GNU, unistd.h}
Inquire about the associativity of the Level 2 cache.

@item _SC_LEVEL2_CACHE_LINESIZE
@standards{GNU, unistd.h}
Inquire about the line length of the Level 2 cache.

@item _SC_LEVEL3_CACHE_SIZE
@standards{GNU, unistd.h}
Inquire about the size of the Level 3 cache.

@item _SC_LEVEL3_CACHE_ASSOC
@standards{GNU, unistd.h}
Inquire about the associativity of the Level 3 cache.

@item _SC_LEVEL3_CACHE_LINESIZE
@standards{GNU, unistd.h}
Inquire about the line length of the Level 3 cache.

@item _SC_LEVEL4_CACHE_SIZE
@standards{GNU, unistd.h}
Inquire about the size of the Level 4 cache.

@item _SC_LEVEL4_CACHE_ASSOC
@standards{GNU, unistd.h}
Inquire about the associativity of the Level 4 cache.

@item _SC_LEVEL4_CACHE_LINESIZE
@standards{GNU, unistd.h}
Inquire about the line length of the Level 4 cache.


@item _SC_XOPEN_VERSION
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_VERSION}.

@item _SC_XOPEN_XCU_VERSION
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_XCU_VERSION}.

@item _SC_XOPEN_UNIX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_UNIX}.

@item _SC_XOPEN_REALTIME
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_REALTIME}.

@item _SC_XOPEN_REALTIME_THREADS
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_REALTIME_THREADS}.

@item _SC_XOPEN_LEGACY
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_LEGACY}.

@item _SC_XOPEN_CRYPT
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_CRYPT}.

@item _SC_XOPEN_ENH_I18N
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_ENH_I18N}.

@item _SC_XOPEN_SHM
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_SHM}.

@item _SC_XOPEN_XPG2
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_XPG2}.

@item _SC_XOPEN_XPG3
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_XPG3}.

@item _SC_XOPEN_XPG4
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{_XOPEN_XPG4}.

@item _SC_CHAR_BIT
@standards{X/Open, unistd.h}
Inquire about the number of bits in a variable of type @code{char}.

@item _SC_CHAR_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{char}.

@item _SC_CHAR_MIN
@standards{X/Open, unistd.h}
Inquire about the minimum value which can be stored in a variable of type
@code{char}.

@item _SC_INT_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{int}.

@item _SC_INT_MIN
@standards{X/Open, unistd.h}
Inquire about the minimum value which can be stored in a variable of type
@code{int}.

@item _SC_LONG_BIT
@standards{X/Open, unistd.h}
Inquire about the number of bits in a variable of type @code{long int}.

@item _SC_WORD_BIT
@standards{X/Open, unistd.h}
Inquire about the number of bits in a variable of a register word.

@item _SC_MB_LEN_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum length of a multi-byte representation of a wide
character value.

@item _SC_NZERO
@standards{X/Open, unistd.h}
Inquire about the value used to internally represent the zero priority level for
the process execution.

@item _SC_SSIZE_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{ssize_t}.

@item _SC_SCHAR_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{signed char}.

@item _SC_SCHAR_MIN
@standards{X/Open, unistd.h}
Inquire about the minimum value which can be stored in a variable of type
@code{signed char}.

@item _SC_SHRT_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{short int}.

@item _SC_SHRT_MIN
@standards{X/Open, unistd.h}
Inquire about the minimum value which can be stored in a variable of type
@code{short int}.

@item _SC_UCHAR_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{unsigned char}.

@item _SC_UINT_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{unsigned int}.

@item _SC_ULONG_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{unsigned long int}.

@item _SC_USHRT_MAX
@standards{X/Open, unistd.h}
Inquire about the maximum value which can be stored in a variable of type
@code{unsigned short int}.

@item _SC_NL_ARGMAX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{NL_ARGMAX}.

@item _SC_NL_LANGMAX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{NL_LANGMAX}.

@item _SC_NL_MSGMAX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{NL_MSGMAX}.

@item _SC_NL_NMAX
@standards{X/Open, unistd.h}
Inquire about  the parameter corresponding to @code{NL_NMAX}.

@item _SC_NL_SETMAX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{NL_SETMAX}.

@item _SC_NL_TEXTMAX
@standards{X/Open, unistd.h}
Inquire about the parameter corresponding to @code{NL_TEXTMAX}.
@end vtable

@node Examples of Sysconf
@subsection Examples of @code{sysconf}

We recommend that you first test for a macro definition for the
parameter you are interested in, and call @code{sysconf} only if the
macro is not defined.  For example, here is how to test whether job
control is supported:

@smallexample
@group
int
have_job_control (void)
@{
#ifdef _POSIX_JOB_CONTROL
  return 1;
#else
  int value = sysconf (_SC_JOB_CONTROL);
  if (value < 0)
    /* @r{If the system is that badly wedged,}
       @r{there's no use trying to go on.}  */
    fatal (strerror (errno));
  return value;
#endif
@}
@end group
@end smallexample

Here is how to get the value of a numeric limit:

@smallexample
int
get_child_max ()
@{
#ifdef CHILD_MAX
  return CHILD_MAX;
#else
  int value = sysconf (_SC_CHILD_MAX);
  if (value < 0)
    fatal (strerror (errno));
  return value;
#endif
@}
@end smallexample

@node Minimums
@section Minimum Values for General Capacity Limits

Here are the names for the POSIX minimum upper bounds for the system
limit parameters.  The significance of these values is that you can
safely push to these limits without checking whether the particular
system you are using can go that far.

@vtable @code
@item _POSIX_AIO_LISTIO_MAX
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
I/O operations that can be specified in a list I/O call.  The value of
this constant is @code{2}; thus you can add up to two new entries
of the list of outstanding operations.

@item _POSIX_AIO_MAX
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
outstanding asynchronous I/O operations.  The value of this constant is
@code{1}.  So you cannot expect that you can issue more than one
operation and immediately continue with the normal work, receiving the
notifications asynchronously.

@item _POSIX_ARG_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum combined length of the @var{argv} and @var{environ}
arguments that can be passed to the @code{exec} functions.
Its value is @code{4096}.

@item _POSIX_CHILD_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum number of simultaneous processes per real user ID.  Its
value is @code{6}.

@item _POSIX_NGROUPS_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum number of supplementary group IDs per process.  Its
value is @code{0}.

@item _POSIX_OPEN_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum number of files that a single process can have open
simultaneously.  Its value is @code{16}.

@item _POSIX_SSIZE_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum value that can be stored in an object of type
@code{ssize_t}.  Its value is @code{32767}.

@item _POSIX_STREAM_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum number of streams that a single process can have open
simultaneously.  Its value is @code{8}.

@item _POSIX_TZNAME_MAX
@standards{POSIX.1, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the maximum length of a time zone name.  Its value is @code{3}.

@item _POSIX2_RE_DUP_MAX
@standards{POSIX.2, limits.h}
The value of this macro is the most restrictive limit permitted by POSIX
for the numbers used in the @samp{\@{@var{min},@var{max}\@}} construct
in a regular expression.  Its value is @code{255}.
@end vtable

@node Limits for Files
@section Limits on File System Capacity

The POSIX.1 standard specifies a number of parameters that describe the
limitations of the file system.  It's possible for the system to have a
fixed, uniform limit for a parameter, but this isn't the usual case.  On
most systems, it's possible for different file systems (and, for some
parameters, even different files) to have different maximum limits.  For
example, this is very likely if you use NFS to mount some of the file
systems from other machines.

@pindex limits.h
Each of the following macros is defined in @file{limits.h} only if the
system has a fixed, uniform limit for the parameter in question.  If the
system allows different file systems or files to have different limits,
then the macro is undefined; use @code{pathconf} or @code{fpathconf} to
find out the limit that applies to a particular file.  @xref{Pathconf}.

Each parameter also has another macro, with a name starting with
@samp{_POSIX}, which gives the lowest value that the limit is allowed to
have on @emph{any} POSIX system.  @xref{File Minimums}.

@cindex limits, link count of files
@deftypevr Macro int LINK_MAX
@standards{POSIX.1, limits.h (optional)}
The uniform system limit (if any) for the number of names for a given
file.  @xref{Hard Links}.
@end deftypevr

@cindex limits, terminal input queue
@deftypevr Macro int MAX_CANON
@standards{POSIX.1, limits.h}
The uniform system limit (if any) for the amount of text in a line of
input when input editing is enabled.  @xref{Canonical or Not}.
@end deftypevr

@deftypevr Macro int MAX_INPUT
@standards{POSIX.1, limits.h}
The uniform system limit (if any) for the total number of characters
typed ahead as input.  @xref{I/O Queues}.
@end deftypevr

@cindex limits, file name length
@deftypevr Macro int NAME_MAX
@standards{POSIX.1, limits.h}
The uniform system limit (if any) for the length of a file name component, not
including the terminating null character.

@strong{Portability Note:} On some systems, @theglibc{} defines
@code{NAME_MAX}, but does not actually enforce this limit.
@end deftypevr

@deftypevr Macro int PATH_MAX
@standards{POSIX.1, limits.h}
The uniform system limit (if any) for the length of an entire file name (that
is, the argument given to system calls such as @code{open}), including the
terminating null character.

@strong{Portability Note:} @Theglibc{} does not enforce this limit
even if @code{PATH_MAX} is defined.
@end deftypevr

@cindex limits, pipe buffer size
@deftypevr Macro int PIPE_BUF
@standards{POSIX.1, limits.h}
The uniform system limit (if any) for the number of bytes that can be
written atomically to a pipe.  If multiple processes are writing to the
same pipe simultaneously, output from different processes might be
interleaved in chunks of this size.  @xref{Pipes and FIFOs}.
@end deftypevr

These are alternative macro names for some of the same information.

@deftypevr Macro int MAXNAMLEN
@standards{BSD, dirent.h}
This is the BSD name for @code{NAME_MAX}.  It is defined in
@file{dirent.h}.
@end deftypevr

@deftypevr Macro int FILENAME_MAX
@standards{ISO, stdio.h}
The value of this macro is an integer constant expression that
represents the maximum length of a file name string.  It is defined in
@file{stdio.h}.

Unlike @code{PATH_MAX}, this macro is defined even if there is no actual
limit imposed.  In such a case, its value is typically a very large
number.  @strong{This is always the case on @gnuhurdsystems{}.}

@strong{Usage Note:} Don't use @code{FILENAME_MAX} as the size of an
array in which to store a file name!  You can't possibly make an array
that big!  Use dynamic allocation (@pxref{Memory Allocation}) instead.
@end deftypevr

@node Options for Files
@section Optional Features in File Support

POSIX defines certain system-specific options in the system calls for
operating on files.  Some systems support these options and others do
not.  Since these options are provided in the kernel, not in the
library, simply using @theglibc{} does not guarantee that any of these
features is supported; it depends on the system you are using.  They can
also vary between file systems on a single machine.

@pindex unistd.h
This section describes the macros you can test to determine whether a
particular option is supported on your machine.  If a given macro is
defined in @file{unistd.h}, then its value says whether the
corresponding feature is supported.  (A value of @code{-1} indicates no;
any other value indicates yes.)  If the macro is undefined, it means
particular files may or may not support the feature.

Since all the machines that support @theglibc{} also support NFS,
one can never make a general statement about whether all file systems
support the @code{_POSIX_CHOWN_RESTRICTED} and @code{_POSIX_NO_TRUNC}
features.  So these names are never defined as macros in @theglibc{}.

@deftypevr Macro int _POSIX_CHOWN_RESTRICTED
@standards{POSIX.1, unistd.h}
If this option is in effect, the @code{chown} function is restricted so
that the only changes permitted to nonprivileged processes is to change
the group owner of a file to either be the effective group ID of the
process, or one of its supplementary group IDs.  @xref{File Owner}.
@end deftypevr

@deftypevr Macro int _POSIX_NO_TRUNC
@standards{POSIX.1, unistd.h}
If this option is in effect, file name components longer than
@code{NAME_MAX} generate an @code{ENAMETOOLONG} error.  Otherwise, file
name components that are too long are silently truncated.
@end deftypevr

@deftypevr Macro {unsigned char} _POSIX_VDISABLE
@standards{POSIX.1, unistd.h}
This option is only meaningful for files that are terminal devices.
If it is enabled, then handling for special control characters can
be disabled individually.  @xref{Special Characters}.
@end deftypevr

@pindex unistd.h
If one of these macros is undefined, that means that the option might be
in effect for some files and not for others.  To inquire about a
particular file, call @code{pathconf} or @code{fpathconf}.
@xref{Pathconf}.

@node File Minimums
@section Minimum Values for File System Limits

Here are the names for the POSIX minimum upper bounds for some of the
above parameters.  The significance of these values is that you can
safely push to these limits without checking whether the particular
system you are using can go that far.  In most cases @gnusystems{} do not
have these strict limitations.  The actual limit should be requested if
necessary.

@vtable @code
@item _POSIX_LINK_MAX
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum value of a
file's link count.  The value of this constant is @code{8}; thus, you
can always make up to eight names for a file without running into a
system limit.

@item _POSIX_MAX_CANON
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
bytes in a canonical input line from a terminal device.  The value of
this constant is @code{255}.

@item _POSIX_MAX_INPUT
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
bytes in a terminal device input queue (or typeahead buffer).
@xref{Input Modes}.  The value of this constant is @code{255}.

@item _POSIX_NAME_MAX
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
bytes in a file name component.  The value of this constant is
@code{14}.

@item _POSIX_PATH_MAX
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
bytes in a file name.  The value of this constant is @code{256}.

@item _POSIX_PIPE_BUF
@standards{POSIX.1, limits.h}
The most restrictive limit permitted by POSIX for the maximum number of
bytes that can be written atomically to a pipe.  The value of this
constant is @code{512}.

@item SYMLINK_MAX
@standards{POSIX.1, limits.h}
Maximum number of bytes in a symbolic link.

@item POSIX_REC_INCR_XFER_SIZE
@standards{POSIX.1, limits.h}
Recommended increment for file transfer sizes between the
@code{POSIX_REC_MIN_XFER_SIZE} and @code{POSIX_REC_MAX_XFER_SIZE}
values.

@item POSIX_REC_MAX_XFER_SIZE
@standards{POSIX.1, limits.h}
Maximum recommended file transfer size.

@item POSIX_REC_MIN_XFER_SIZE
@standards{POSIX.1, limits.h}
Minimum recommended file transfer size.

@item POSIX_REC_XFER_ALIGN
@standards{POSIX.1, limits.h}
Recommended file transfer buffer alignment.
@end vtable

@node Pathconf
@section Using @code{pathconf}

When your machine allows different files to have different values for a
file system parameter, you can use the functions in this section to find
out the value that applies to any particular file.

These functions and the associated constants for the @var{parameter}
argument are declared in the header file @file{unistd.h}.

@deftypefun {long int} pathconf (const char *@var{filename}, int @var{parameter})
@standards{POSIX.1, unistd.h}
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
@c When __statfs_link_max finds an ext* filesystem, it may read
@c /proc/mounts or similar as a mntent stream.
@c __statfs_chown_restricted may read from
@c /proc/sys/fs/xfs/restrict_chown as a file descriptor.
This function is used to inquire about the limits that apply to
the file named @var{filename}.

The @var{parameter} argument should be one of the @samp{_PC_} constants
listed below.

The normal return value from @code{pathconf} is the value you requested.
A value of @code{-1} is returned both if the implementation does not
impose a limit, and in case of an error.  In the former case,
@code{errno} is not set, while in the latter case, @code{errno} is set
to indicate the cause of the problem.  So the only way to use this
function robustly is to store @code{0} into @code{errno} just before
calling it.

Besides the usual file name errors (@pxref{File Name Errors}),
the following error condition is defined for this function:

@table @code
@item EINVAL
The value of @var{parameter} is invalid, or the implementation doesn't
support the @var{parameter} for the specific file.
@end table
@end deftypefun

@deftypefun {long int} fpathconf (int @var{filedes}, int @var{parameter})
@standards{POSIX.1, unistd.h}
@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{} @ascuheap{}}@acunsafe{@aculock{} @acsfd{} @acsmem{}}}
@c Same caveats as pathconf.
This is just like @code{pathconf} except that an open file descriptor
is used to specify the file for which information is requested, instead
of a file name.

The following @code{errno} error conditions are defined for this function:

@table @code
@item EBADF
The @var{filedes} argument is not a valid file descriptor.

@item EINVAL
The value of @var{parameter} is invalid, or the implementation doesn't
support the @var{parameter} for the specific file.
@end table
@end deftypefun

Here are the symbolic constants that you can use as the @var{parameter}
argument to @code{pathconf} and @code{fpathconf}.  The values are all
integer constants.

@vtable @code
@item _PC_LINK_MAX
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{LINK_MAX}.

@item _PC_MAX_CANON
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{MAX_CANON}.

@item _PC_MAX_INPUT
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{MAX_INPUT}.

@item _PC_NAME_MAX
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{NAME_MAX}.

@item _PC_PATH_MAX
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{PATH_MAX}.

@item _PC_PIPE_BUF
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{PIPE_BUF}.

@item _PC_CHOWN_RESTRICTED
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_CHOWN_RESTRICTED}.

@item _PC_NO_TRUNC
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_NO_TRUNC}.

@item _PC_VDISABLE
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_VDISABLE}.

@item _PC_SYNC_IO
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_SYNC_IO}.

@item _PC_ASYNC_IO
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_ASYNC_IO}.

@item _PC_PRIO_IO
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{_POSIX_PRIO_IO}.

@item _PC_FILESIZEBITS
@standards{LFS, unistd.h}
Inquire about the availability of large files on the filesystem.

@item _PC_REC_INCR_XFER_SIZE
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{POSIX_REC_INCR_XFER_SIZE}.

@item _PC_REC_MAX_XFER_SIZE
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{POSIX_REC_MAX_XFER_SIZE}.

@item _PC_REC_MIN_XFER_SIZE
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{POSIX_REC_MIN_XFER_SIZE}.

@item _PC_REC_XFER_ALIGN
@standards{POSIX.1, unistd.h}
Inquire about the value of @code{POSIX_REC_XFER_ALIGN}.
@end vtable

@strong{Portability Note:} On some systems, @theglibc{} does not
enforce @code{_PC_NAME_MAX} or @code{_PC_PATH_MAX} limits.

@node Utility Limits
@section Utility Program Capacity Limits

The POSIX.2 standard specifies certain system limits that you can access
through @code{sysconf} that apply to utility behavior rather than the
behavior of the library or the operating system.

@Theglibc{} defines macros for these limits, and @code{sysconf}
returns values for them if you ask; but these values convey no
meaningful information.  They are simply the smallest values that
POSIX.2 permits.

@deftypevr Macro int BC_BASE_MAX
@standards{POSIX.2, limits.h}
The largest value of @code{obase} that the @code{bc} utility is
guaranteed to support.
@end deftypevr

@deftypevr Macro int BC_DIM_MAX
@standards{POSIX.2, limits.h}
The largest number of elements in one array that the @code{bc} utility
is guaranteed to support.
@end deftypevr

@deftypevr Macro int BC_SCALE_MAX
@standards{POSIX.2, limits.h}
The largest value of @code{scale} that the @code{bc} utility is
guaranteed to support.
@end deftypevr

@deftypevr Macro int BC_STRING_MAX
@standards{POSIX.2, limits.h}
The largest number of characters in one string constant that the
@code{bc} utility is guaranteed to support.
@end deftypevr

@deftypevr Macro int COLL_WEIGHTS_MAX
@standards{POSIX.2, limits.h}
The largest number of weights that can necessarily be used in defining
the collating sequence for a locale.
@end deftypevr

@deftypevr Macro int EXPR_NEST_MAX
@standards{POSIX.2, limits.h}
The maximum number of expressions that can be nested within parentheses
by the @code{expr} utility.
@end deftypevr

@deftypevr Macro int LINE_MAX
@standards{POSIX.2, limits.h}
The largest text line that the text-oriented POSIX.2 utilities can
support.  (If you are using the GNU versions of these utilities, then
there is no actual limit except that imposed by the available virtual
memory, but there is no way that the library can tell you this.)
@end deftypevr

@deftypevr Macro int EQUIV_CLASS_MAX
@standards{POSIX.2, limits.h}
The maximum number of weights that can be assigned to an entry of the
@code{LC_COLLATE} category @samp{order} keyword in a locale definition.
@Theglibc{} does not presently support locale definitions.
@end deftypevr

@node Utility Minimums
@section Minimum Values for Utility Limits

@vtable @code
@item _POSIX2_BC_BASE_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum value of
@code{obase} in the @code{bc} utility.  Its value is @code{99}.

@item _POSIX2_BC_DIM_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum size of
an array in the @code{bc} utility.  Its value is @code{2048}.

@item _POSIX2_BC_SCALE_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum value of
@code{scale} in the @code{bc} utility.  Its value is @code{99}.

@item _POSIX2_BC_STRING_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum size of
a string constant in the @code{bc} utility.  Its value is @code{1000}.

@item _POSIX2_COLL_WEIGHTS_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum number
of weights that can necessarily be used in defining the collating
sequence for a locale.  Its value is @code{2}.

@item _POSIX2_EXPR_NEST_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum number
of expressions nested within parenthesis when using the @code{expr} utility.
Its value is @code{32}.

@item _POSIX2_LINE_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum size of
a text line that the text utilities can handle.  Its value is
@code{2048}.

@item _POSIX2_EQUIV_CLASS_MAX
@standards{POSIX.2, limits.h}
The most restrictive limit permitted by POSIX.2 for the maximum number
of weights that can be assigned to an entry of the @code{LC_COLLATE}
category @samp{order} keyword in a locale definition.  Its value is
@code{2}.  @Theglibc{} does not presently support locale
definitions.
@end vtable

@node String Parameters
@section String-Valued Parameters

POSIX.2 defines a way to get string-valued parameters from the operating
system with the function @code{confstr}:

@deftypefun size_t confstr (int @var{parameter}, char *@var{buf}, size_t @var{len})
@standards{POSIX.2, unistd.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
This function reads the value of a string-valued system parameter,
storing the string into @var{len} bytes of memory space starting at
@var{buf}.  The @var{parameter} argument should be one of the
@samp{_CS_} symbols listed below.

The normal return value from @code{confstr} is the length of the string
value that you asked for.  If you supply a null pointer for @var{buf},
then @code{confstr} does not try to store the string; it just returns
its length.  A value of @code{0} indicates an error.

If the string you asked for is too long for the buffer (that is, longer
than @code{@var{len} - 1}), then @code{confstr} stores just that much
(leaving room for the terminating null character).  You can tell that
this has happened because @code{confstr} returns a value greater than or
equal to @var{len}.

The following @code{errno} error conditions are defined for this function:

@table @code
@item EINVAL
The value of the @var{parameter} is invalid.
@end table
@end deftypefun

Currently there is just one parameter you can read with @code{confstr}:

@vtable @code
@item _CS_PATH
@standards{POSIX.2, unistd.h}
This parameter's value is the recommended default path for searching for
executable files.  This is the path that a user has by default just
after logging in.

@item _CS_LFS_CFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the C compiler if a source is compiled using the
@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS_LDFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the linker if a source is compiled using the
@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS_LIBS
@standards{Unix98, unistd.h}
The returned string specifies which additional libraries must be linked
to the application if a source is compiled using the
@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS_LINTFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the lint tool if a source is compiled using the
@code{_LARGEFILE_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS64_CFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the C compiler if a source is compiled using the
@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS64_LDFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the linker if a source is compiled using the
@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS64_LIBS
@standards{Unix98, unistd.h}
The returned string specifies which additional libraries must be linked
to the application if a source is compiled using the
@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.

@item _CS_LFS64_LINTFLAGS
@standards{Unix98, unistd.h}
The returned string specifies which additional flags must be given to
the lint tool if a source is compiled using the
@code{_LARGEFILE64_SOURCE} feature select macro; @pxref{Feature Test Macros}.
@end vtable

The way to use @code{confstr} without any arbitrary limit on string size
is to call it twice: first call it to get the length, allocate the
buffer accordingly, and then call @code{confstr} again to fill the
buffer, like this:

@smallexample
@group
char *
get_default_path (void)
@{
  size_t len = confstr (_CS_PATH, NULL, 0);
  char *buffer = (char *) xmalloc (len);

  if (confstr (_CS_PATH, buf, len + 1) == 0)
    @{
      free (buffer);
      return NULL;
    @}

  return buffer;
@}
@end group
@end smallexample
