1SYSCONF(3P)                POSIX Programmer's Manual               SYSCONF(3P)
2
3
4

PROLOG

6       This  manual  page is part of the POSIX Programmer's Manual.  The Linux
7       implementation of this interface may differ (consult the  corresponding
8       Linux  manual page for details of Linux behavior), or the interface may
9       not be implemented on Linux.
10

NAME

12       sysconf - get configurable system variables
13

SYNOPSIS

15       #include <unistd.h>
16
17       long sysconf(int name);
18
19

DESCRIPTION

21       The sysconf() function provides a method for the application to  deter‐
22       mine the current value of a configurable system limit or option ( vari‐
23       able). The implementation shall support all of the variables listed  in
24       the following table and may support others.
25
26       The  name  argument  represents the system variable to be queried.  The
27       following table lists the minimal set of system  variables  from  <lim‐
28       its.h>  or  <unistd.h>  that can be returned by sysconf(), and the sym‐
29       bolic constants defined in <unistd.h> that are the corresponding values
30       used for name.
31
32         Variable                          Value of Name
33         {AIO_LISTIO_MAX}                  _SC_AIO_LISTIO_MAX
34         {AIO_MAX}                         _SC_AIO_MAX
35         {AIO_PRIO_DELTA_MAX}              _SC_AIO_PRIO_DELTA_MAX
36         {ARG_MAX}                         _SC_ARG_MAX
37         {ATEXIT_MAX}                      _SC_ATEXIT_MAX
38         {BC_BASE_MAX}                     _SC_BC_BASE_MAX
39         {BC_DIM_MAX}                      _SC_BC_DIM_MAX
40         {BC_SCALE_MAX}                    _SC_BC_SCALE_MAX
41         {BC_STRING_MAX}                   _SC_BC_STRING_MAX
42         {CHILD_MAX}                       _SC_CHILD_MAX
43         Clock ticks/second                _SC_CLK_TCK
44         {COLL_WEIGHTS_MAX}                _SC_COLL_WEIGHTS_MAX
45         {DELAYTIMER_MAX}                  _SC_DELAYTIMER_MAX
46         {EXPR_NEST_MAX}                   _SC_EXPR_NEST_MAX
47         {HOST_NAME_MAX}                   _SC_HOST_NAME_MAX
48         {IOV_MAX}                         _SC_IOV_MAX
49         {LINE_MAX}                        _SC_LINE_MAX
50         {LOGIN_NAME_MAX}                  _SC_LOGIN_NAME_MAX
51         {NGROUPS_MAX}                     _SC_NGROUPS_MAX
52         Maximum size of getgrgid_r() and  _SC_GETGR_R_SIZE_MAX
53         getgrnam_r() data buffers
54         Maximum size of getpwuid_r() and  _SC_GETPW_R_SIZE_MAX
55         getpwnam_r() data buffers
56         {MQ_OPEN_MAX}                     _SC_MQ_OPEN_MAX
57         {MQ_PRIO_MAX}                     _SC_MQ_PRIO_MAX
58         {OPEN_MAX}                        _SC_OPEN_MAX
59         _POSIX_ADVISORY_INFO              _SC_ADVISORY_INFO
60         _POSIX_BARRIERS                   _SC_BARRIERS
61         _POSIX_ASYNCHRONOUS_IO            _SC_ASYNCHRONOUS_IO
62         _POSIX_CLOCK_SELECTION            _SC_CLOCK_SELECTION
63         _POSIX_CPUTIME                    _SC_CPUTIME
64         _POSIX_FILE_LOCKING               _SC_FILE_LOCKING
65         _POSIX_FSYNC                      _SC_FSYNC
66
67         _POSIX_IPV6                       _SC_IPV6
68         _POSIX_JOB_CONTROL                _SC_JOB_CONTROL
69         _POSIX_MAPPED_FILES               _SC_MAPPED_FILES
70         _POSIX_MEMLOCK                    _SC_MEMLOCK
71         _POSIX_MEMLOCK_RANGE              _SC_MEMLOCK_RANGE
72         _POSIX_MEMORY_PROTECTION          _SC_MEMORY_PROTECTION
73         _POSIX_MESSAGE_PASSING            _SC_MESSAGE_PASSING
74         _POSIX_MONOTONIC_CLOCK            _SC_MONOTONIC_CLOCK
75         _POSIX_MULTI_PROCESS              _SC_MULTI_PROCESS
76         _POSIX_PRIORITIZED_IO             _SC_PRIORITIZED_IO
77         _POSIX_PRIORITY_SCHEDULING        _SC_PRIORITY_SCHEDULING
78         _POSIX_RAW_SOCKETS                _SC_RAW_SOCKETS
79         _POSIX_READER_WRITER_LOCKS        _SC_READER_WRITER_LOCKS
80         _POSIX_REALTIME_SIGNALS           _SC_REALTIME_SIGNALS
81         _POSIX_REGEXP                     _SC_REGEXP
82         _POSIX_SAVED_IDS                  _SC_SAVED_IDS
83         _POSIX_SEMAPHORES                 _SC_SEMAPHORES
84         _POSIX_SHARED_MEMORY_OBJECTS      _SC_SHARED_MEMORY_OBJECTS
85         _POSIX_SHELL                      _SC_SHELL
86         _POSIX_SPAWN                      _SC_SPAWN
87         _POSIX_SPIN_LOCKS                 _SC_SPIN_LOCKS
88         _POSIX_SPORADIC_SERVER            _SC_SPORADIC_SERVER
89         _POSIX_SYMLOOP_MAX                _SC_SYMLOOP_MAX
90         _POSIX_SYNCHRONIZED_IO            _SC_SYNCHRONIZED_IO
91         _POSIX_THREAD_ATTR_STACKADDR      _SC_THREAD_ATTR_STACKADDR
92         _POSIX_THREAD_ATTR_STACKSIZE      _SC_THREAD_ATTR_STACKSIZE
93         _POSIX_THREAD_CPUTIME             _SC_THREAD_CPUTIME
94         _POSIX_THREAD_PRIO_INHERIT        _SC_THREAD_PRIO_INHERIT
95         _POSIX_THREAD_PRIO_PROTECT        _SC_THREAD_PRIO_PROTECT
96         _POSIX_THREAD_PRIORITY_SCHEDULING _SC_THREAD_PRIORITY_SCHEDULING
97         _POSIX_THREAD_PROCESS_SHARED      _SC_THREAD_PROCESS_SHARED
98         _POSIX_THREAD_SAFE_FUNCTIONS      _SC_THREAD_SAFE_FUNCTIONS
99         _POSIX_THREAD_SPORADIC_SERVER     _SC_THREAD_SPORADIC_SERVER
100         _POSIX_THREADS                    _SC_THREADS
101         _POSIX_TIMEOUTS                   _SC_TIMEOUTS
102         _POSIX_TIMERS                     _SC_TIMERS
103         _POSIX_TRACE                      _SC_TRACE
104         _POSIX_TRACE_EVENT_FILTER         _SC_TRACE_EVENT_FILTER
105         _POSIX_TRACE_INHERIT              _SC_TRACE_INHERIT
106         _POSIX_TRACE_LOG                  _SC_TRACE_LOG
107         _POSIX_TYPED_MEMORY_OBJECTS       _SC_TYPED_MEMORY_OBJECTS
108         _POSIX_VERSION                    _SC_VERSION
109         _POSIX_V6_ILP32_OFF32             _SC_V6_ILP32_OFF32
110         _POSIX_V6_ILP32_OFFBIG            _SC_V6_ILP32_OFFBIG
111         _POSIX_V6_LP64_OFF64              _SC_V6_LP64_OFF64
112         _POSIX_V6_LPBIG_OFFBIG            _SC_V6_LPBIG_OFFBIG
113         _POSIX2_C_BIND                    _SC_2_C_BIND
114         _POSIX2_C_DEV                     _SC_2_C_DEV
115         _POSIX2_C_VERSION                 _SC_2_C_VERSION
116         _POSIX2_CHAR_TERM                 _SC_2_CHAR_TERM
117         _POSIX2_FORT_DEV                  _SC_2_FORT_DEV
118         _POSIX2_FORT_RUN                  _SC_2_FORT_RUN
119         _POSIX2_LOCALEDEF                 _SC_2_LOCALEDEF
120         _POSIX2_PBS                       _SC_2_PBS
121         _POSIX2_PBS_ACCOUNTING            _SC_2_PBS_ACCOUNTING
122         _POSIX2_PBS_CHECKPOINT            _SC_2_PBS_CHECKPOINT
123         _POSIX2_PBS_LOCATE                _SC_2_PBS_LOCATE
124         _POSIX2_PBS_MESSAGE               _SC_2_PBS_MESSAGE
125         _POSIX2_PBS_TRACK                 _SC_2_PBS_TRACK
126         _POSIX2_SW_DEV                    _SC_2_SW_DEV
127         _POSIX2_UPE                       _SC_2_UPE
128         _POSIX2_VERSION                   _SC_2_VERSION
129         _REGEX_VERSION                    _SC_REGEX_VERSION
130         {PAGE_SIZE}                       _SC_PAGE_SIZE
131         {PAGESIZE}                        _SC_PAGESIZE
132
133         {PTHREAD_DESTRUCTOR_ITERATIONS}   _SC_THREAD_DESTRUCTOR_ITERATIONS
134         {PTHREAD_KEYS_MAX}                _SC_THREAD_KEYS_MAX
135         {PTHREAD_STACK_MIN}               _SC_THREAD_STACK_MIN
136         {PTHREAD_THREADS_MAX}             _SC_THREAD_THREADS_MAX
137         {RE_DUP_MAX}                      _SC_RE_DUP_MAX
138         {RTSIG_MAX}                       _SC_RTSIG_MAX
139         {SEM_NSEMS_MAX}                   _SC_SEM_NSEMS_MAX
140         {SEM_VALUE_MAX}                   _SC_SEM_VALUE_MAX
141         {SIGQUEUE_MAX}                    _SC_SIGQUEUE_MAX
142         {STREAM_MAX}                      _SC_STREAM_MAX
143         {SYMLOOP_MAX}                     _SC_SYMLOOP_MAX
144         {TIMER_MAX}                       _SC_TIMER_MAX
145         {TTY_NAME_MAX}                    _SC_TTY_NAME_MAX
146         {TZNAME_MAX}                      _SC_TZNAME_MAX
147         _XBS5_ILP32_OFF32 (LEGACY)        _SC_XBS5_ILP32_OFF32 (LEGACY)
148         _XBS5_ILP32_OFFBIG (LEGACY)       _SC_XBS5_ILP32_OFFBIG (LEGACY)
149         _XBS5_LP64_OFF64 (LEGACY)         _SC_XBS5_LP64_OFF64 (LEGACY)
150         _XBS5_LPBIG_OFFBIG (LEGACY)       _SC_XBS5_LPBIG_OFFBIG (LEGACY)
151         _XOPEN_CRYPT                      _SC_XOPEN_CRYPT
152         _XOPEN_ENH_I18N                   _SC_XOPEN_ENH_I18N
153         _XOPEN_LEGACY                     _SC_XOPEN_LEGACY
154         _XOPEN_REALTIME                   _SC_XOPEN_REALTIME
155         _XOPEN_REALTIME_THREADS           _SC_XOPEN_REALTIME_THREADS
156         _XOPEN_SHM                        _SC_XOPEN_SHM
157         _XOPEN_STREAMS                    _SC_XOPEN_STREAMS
158         _XOPEN_UNIX                       _SC_XOPEN_UNIX
159         _XOPEN_VERSION                    _SC_XOPEN_VERSION
160         _XOPEN_XCU_VERSION                _SC_XOPEN_XCU_VERSION
161

RETURN VALUE

163       If name is an invalid value, sysconf() shall return -1 and set errno to
164       indicate the error. If the variable corresponding to name has no limit,
165       sysconf()  shall  return  -1  without changing the value of errno. Note
166       that indefinite limits do not imply infinite limits; see <limits.h>.
167
168       Otherwise, sysconf() shall return the current  variable  value  on  the
169       system.  The value returned shall not be more restrictive than the cor‐
170       responding value described to the application when it was compiled with
171       the  implementation's  <limits.h>  or  <unistd.h>.  The value shall not
172       change during  the  lifetime  of  the  calling  process,   except  that
173       sysconf(_SC_OPEN_MAX)  may  return  different values before and after a
174       call to setrlimit() which changes the RLIMIT_NOFILE soft limit.
175

ERRORS

177       The sysconf() function shall fail if:
178
179       EINVAL The value of the name argument is invalid.
180
181
182       The following sections are informative.
183

EXAMPLES

185       None.
186

APPLICATION USAGE

188       As -1 is a permissible return  value  in  a  successful  situation,  an
189       application  wishing  to check for error situations should set errno to
190       0, then call sysconf(), and, if it returns -1, check to see if errno is
191       non-zero.
192
193       If the value of sysconf(_SC_2_VERSION) is not equal to the value of the
194       _POSIX2_VERSION symbolic constant, the utilities available via system()
195       or  popen()  might  not  behave as described in the Shell and Utilities
196       volume of IEEE Std 1003.1-2001.  This would mean that  the  application
197       is  not running in an environment that conforms to the Shell and Utili‐
198       ties volume of IEEE Std 1003.1-2001. Some applications might be able to
199       deal  with  this,  others  might not. However, the functions defined in
200       this volume of IEEE Std 1003.1-2001 continue to operate  as  specified,
201       even  if  sysconf(_SC_2_VERSION)  reports  that the utilities no longer
202       perform as specified.
203

RATIONALE

205       This functionality was added in response to requirements of application
206       developers  and of system vendors who deal with many international sys‐
207       tem configurations. It is closely  related  to  pathconf()  and  fpath‐
208       conf().
209
210       Although  a  conforming  application  can  run  on all systems by never
211       demanding more resources than the minimum values published in this vol‐
212       ume  of  IEEE Std 1003.1-2001,  it is useful for that application to be
213       able to use the actual value for the quantity of a  resource  available
214       on any given system. To do this, the application makes use of the value
215       of a symbolic constant in <limits.h> or <unistd.h>.
216
217       However, once compiled, the application must still be able to  cope  if
218       the amount of resource available is increased. To that end, an applica‐
219       tion may need a means of determining the quantity of a resource, or the
220       presence of an option, at execution time.
221
222       Two examples are offered:
223
224        1. Applications may wish to act differently on systems with or without
225           job control. Applications vendors who wish  to  distribute  only  a
226           single  binary  package to all instances of a computer architecture
227           would be forced to assume job control is never available if it were
228           to  rely solely on the <unistd.h> value published in this volume of
229           IEEE Std 1003.1-2001.
230
231        2. International applications vendors occasionally  require  knowledge
232           of  the number of clock ticks per second. Without these facilities,
233           they would be required to either distribute their applications par‐
234           tially  in  source form or to have 50 Hz and 60 Hz versions for the
235           various countries in which they operate.
236
237       It is the knowledge that many  applications  are  actually  distributed
238       widely  in  executable  form that leads to this facility. If limited to
239       the most restrictive values in the  headers,  such  applications  would
240       have  to be prepared to accept the most limited environments offered by
241       the smallest microcomputers. Although this is entirely portable,  there
242       was  a  consensus  that  they  should  be able to take advantage of the
243       facilities offered by large systems, without the  restrictions  associ‐
244       ated with source and object distributions.
245
246       During  the  discussions of this feature, it was pointed out that it is
247       almost always possible for an application to discern what a value might
248       be  at  runtime  by  suitably testing the various functions themselves.
249       And, in any event, it could always be written to adequately  deal  with
250       error  returns from the various functions. In the end, it was felt that
251       this imposed an unreasonable level of complication  and  sophistication
252       on the application writer.
253
254       This runtime facility is not meant to provide ever-changing values that
255       applications have to check multiple  times.  The  values  are  seen  as
256       changing  no  more frequently than once per system initialization, such
257       as by a system administrator or operator with an  automatic  configura‐
258       tion  program.  This volume of IEEE Std 1003.1-2001 specifies that they
259       shall not change within the lifetime of the process.
260
261       Some values apply to the system overall and others  vary  at  the  file
262       system or directory level. The latter are described in pathconf() .
263
264       Note  that  all values returned must be expressible as integers. String
265       values were considered, but the additional flexibility of this approach
266       was rejected due to its added complexity of implementation and use.
267
268       Some  values, such as {PATH_MAX}, are sometimes so large that they must
269       not be used to, say, allocate arrays. The sysconf() function returns  a
270       negative  value to show that this symbolic constant is not even defined
271       in this case.
272
273       Similar to pathconf(), this permits the implementation not  to  have  a
274       limit.  When  one  resource  is infinite, returning an error indicating
275       that some other resource limit has been reached is conforming behavior.
276

FUTURE DIRECTIONS

278       None.
279

SEE ALSO

281       confstr(),    pathconf(),    the    Base    Definitions    volume    of
282       IEEE Std 1003.1-2001,  <limits.h>,  <unistd.h>, the Shell and Utilities
283       volume of IEEE Std 1003.1-2001, getconf
284
286       Portions of this text are reprinted and reproduced in  electronic  form
287       from IEEE Std 1003.1, 2003 Edition, Standard for Information Technology
288       -- Portable Operating System Interface (POSIX),  The  Open  Group  Base
289       Specifications  Issue  6,  Copyright  (C) 2001-2003 by the Institute of
290       Electrical and Electronics Engineers, Inc and The Open  Group.  In  the
291       event of any discrepancy between this version and the original IEEE and
292       The Open Group Standard, the original IEEE and The Open Group  Standard
293       is  the  referee document. The original Standard can be obtained online
294       at http://www.opengroup.org/unix/online.html .
295
296
297
298IEEE/The Open Group                  2003                          SYSCONF(3P)
Impressum