| @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 int 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 the GNU C library 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}. The GNU C library 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}. The GNU C library 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. The GNU C |
| library 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. The GNU C library 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}. The GNU C library |
| 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. |
| |
| The GNU C compiler predefines the symbol @code{__POSIX__} if the target |
| system is a POSIX system. Provided you do not use any other compilers |
| on POSIX systems, testing @code{defined (__POSIX__)} will reliably |
| detect such systems. |
| @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}) |
| 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 parameter corresponding to @code{CLOCKS_PER_SEC}; |
| @pxref{CPU Time}. |
| |
| @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. The GNU C library 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 |
| @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. |
| @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}). |
| @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 the GNU system.} |
| |
| @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 the GNU C library 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 the GNU C library 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 the GNU C |
| library. |
| |
| @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 GNU systems 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}) |
| 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}) |
| 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 |
| |
| @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. |
| |
| The GNU C library 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. |
| The GNU C library 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}. The GNU C library 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}) |
| 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 |