@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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int ARG_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int CHILD_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int OPEN_MAX
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

@comment limits.h
@comment POSIX.1
@deftypevr Macro int STREAM_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int TZNAME_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int NGROUPS_MAX
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

@comment limits.h
@comment POSIX.1
@deftypevr Macro ssize_t SSIZE_MAX
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

@comment limits.h
@comment POSIX.2
@deftypevr Macro int RE_DUP_MAX
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 is 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}.

@comment unistd.h
@comment POSIX.1
@deftypevr Macro int _POSIX_JOB_CONTROL
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

@comment unistd.h
@comment POSIX.1
@deftypevr Macro int _POSIX_SAVED_IDS
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}.

@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_C_DEV
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

@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_FORT_DEV
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

@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_FORT_RUN
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

@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_LOCALEDEF
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

@comment unistd.h
@comment POSIX.2
@deftypevr Macro int _POSIX2_SW_DEV
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

@comment unistd.h
@comment POSIX.1
@deftypevr Macro {long int} _POSIX_VERSION
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

@comment unistd.h
@comment POSIX.2
@deftypevr Macro {long int} _POSIX2_C_VERSION
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}

@comment unistd.h
@comment POSIX.1
@deftypefun {long int} sysconf (int @var{parameter})
@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.  _SC_TZNAME_MAX calls __tzname_max, that (while holding a lock)
@c calls tzset_internal, that calls getenv if it's called the first
@c time; there are free and strdup calls in there too.  The returned max
@c value may change over time for TZNAME_MAX, depending on selected
@c timezones; NPROCS, NPROCS_CONF, PHYS_PAGES, AVPHYS_PAGES,
@c NGROUPS_MAX, SIGQUEUE_MAX, depending on variable values read from
@c /proc at each call, and from rlimit-obtained values CHILD_MAX,
@c 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
@comment unistd.h
@comment POSIX.1
@item _SC_ARG_MAX
Inquire about the parameter corresponding to @code{ARG_MAX}.

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment GNU
@item _SC_CHARCLASS_NAME_MAX
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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment POSIX.1
@item _SC_AIO_PRIO_DELTA_MAX
Inquire 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}.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment POSIX.1g
@item _SC_T_IOV_MAX
Inquire the value of the value associated with the @code{T_IOV_MAX}
variable.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment POSIX.2
@item _SC_EQUIV_CLASS_MAX
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.

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

@comment unistd.h
@comment POSIX.2
@item _SC_2_VERSION
Inquire about the version number of POSIX.2 that the system utilities
support.

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

@comment unistd.h
@comment GNU
@item _SC_NPROCESSORS_CONF
Inquire about the number of configured processors.

@comment unistd.h
@comment GNU
@item _SC_NPROCESSORS_ONLN
Inquire about the number of processors online.

@comment unistd.h
@comment GNU
@item _SC_PHYS_PAGES
Inquire about the number of physical pages in the system.

@comment unistd.h
@comment GNU
@item _SC_AVPHYS_PAGES
Inquire about the number of available physical pages in the system.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment X/Open
@item _SC_MB_LEN_MAX
Inquire the maximum length of a multi-byte representation of a wide
character value.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment X/Open
@item _SC_NL_TEXTMAX
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.

@table @code
@comment limits.h
@comment POSIX.1
@item _POSIX_AIO_LISTIO_MAX
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.

@comment limits.h
@comment POSIX.1
@item _POSIX_AIO_MAX
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.

@comment limits.h
@comment POSIX.1
@item _POSIX_ARG_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_CHILD_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_NGROUPS_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_OPEN_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_SSIZE_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_STREAM_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_TZNAME_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_RE_DUP_MAX
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 table

@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
@comment limits.h (optional)
@comment POSIX.1
@deftypevr Macro int LINK_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int MAX_CANON
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

@comment limits.h
@comment POSIX.1
@deftypevr Macro int MAX_INPUT
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int NAME_MAX
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

@comment limits.h
@comment POSIX.1
@deftypevr Macro int PATH_MAX
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
@comment limits.h
@comment POSIX.1
@deftypevr Macro int PIPE_BUF
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.

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

@comment stdio.h
@comment ISO
@deftypevr Macro int FILENAME_MAX
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{}.

@comment unistd.h
@comment POSIX.1
@deftypevr Macro int _POSIX_CHOWN_RESTRICTED
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

@comment unistd.h
@comment POSIX.1
@deftypevr Macro int _POSIX_NO_TRUNC
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

@comment unistd.h
@comment POSIX.1
@deftypevr Macro {unsigned char} _POSIX_VDISABLE
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.

@table @code
@comment limits.h
@comment POSIX.1
@item _POSIX_LINK_MAX
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.

@comment limits.h
@comment POSIX.1
@item _POSIX_MAX_CANON
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_MAX_INPUT
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_NAME_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_PATH_MAX
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}.

@comment limits.h
@comment POSIX.1
@item _POSIX_PIPE_BUF
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}.

@comment limits.h
@comment POSIX.1
@item SYMLINK_MAX
Maximum number of bytes in a symbolic link.

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

@comment limits.h
@comment POSIX.1
@item POSIX_REC_MAX_XFER_SIZE
Maximum recommended file transfer size.

@comment limits.h
@comment POSIX.1
@item POSIX_REC_MIN_XFER_SIZE
Minimum recommended file transfer size.

@comment limits.h
@comment POSIX.1
@item POSIX_REC_XFER_ALIGN
Recommended file transfer buffer alignment.
@end table

@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}.

@comment unistd.h
@comment POSIX.1
@deftypefun {long int} pathconf (const char *@var{filename}, int @var{parameter})
@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

@comment unistd.h
@comment POSIX.1
@deftypefun {long int} fpathconf (int @var{filedes}, int @var{parameter})
@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.

@table @code
@comment unistd.h
@comment POSIX.1
@item _PC_LINK_MAX
Inquire about the value of @code{LINK_MAX}.

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

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

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

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

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

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

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

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

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

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

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

@comment unistd.h
@comment LFS
@item _PC_FILESIZEBITS
Inquire about the availability of large files on the filesystem.

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

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

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

@comment unistd.h
@comment POSIX.1
@item _PC_REC_XFER_ALIGN
Inquire about the value of @code{POSIX_REC_XFER_ALIGN}.
@end table

@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.

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

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

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

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

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

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

@comment limits.h
@comment POSIX.2
@deftypevr Macro int LINE_MAX
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

@comment limits.h
@comment POSIX.2
@deftypevr Macro int EQUIV_CLASS_MAX
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

@table @code
@comment limits.h
@comment POSIX.2
@item _POSIX2_BC_BASE_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_BC_DIM_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_BC_SCALE_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_BC_STRING_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_COLL_WEIGHTS_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_EXPR_NEST_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_LINE_MAX
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}.

@comment limits.h
@comment POSIX.2
@item _POSIX2_EQUIV_CLASS_MAX
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 table

@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}:

@comment unistd.h
@comment POSIX.2
@deftypefun size_t confstr (int @var{parameter}, char *@var{buf}, size_t @var{len})
@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}:

@table @code
@comment unistd.h
@comment POSIX.2
@item _CS_PATH
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.

@comment unistd.h
@comment Unix98
@item _CS_LFS_CFLAGS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS_LDFLAGS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS_LIBS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS_LINTFLAGS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS64_CFLAGS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS64_LDFLAGS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS64_LIBS
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}.

@comment unistd.h
@comment Unix98
@item _CS_LFS64_LINTFLAGS
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 table

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
