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