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

DESCRIPTION

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

RETURN VALUE

167       If name is an invalid value, sysconf() shall return -1 and set errno to
168       indicate the error. If the variable corresponding to name is  described
169       in  <limits.h>  as  a  maximum or minimum value and the variable has no
170       limit, sysconf() shall return -1 without changing the value  of  errno.
171       Note  that  indefinite  limits  do not imply infinite limits; see <lim‐
172       its.h>.
173
174       Otherwise, sysconf() shall return the current  variable  value  on  the
175       system.  The value returned shall not be more restrictive than the cor‐
176       responding value described to the application when it was compiled with
177       the  implementation's  <limits.h>  or  <unistd.h>.  The value shall not
178       change  during  the  lifetime  of  the  calling  process,  except  that
179       sysconf(_SC_OPEN_MAX)  may  return  different values before and after a
180       call to setrlimit() which changes the RLIMIT_NOFILE soft limit.
181
182       If the variable corresponding to name is dependent  on  an  unsupported
183       option, the results are unspecified.
184

ERRORS

186       The sysconf() function shall fail if:
187
188       EINVAL The value of the name argument is invalid.
189
190       The following sections are informative.
191

EXAMPLES

193       None.
194

APPLICATION USAGE

196       As  -1  is  a  permissible  return  value in a successful situation, an
197       application wishing to check for error situations should set  errno  to
198       0, then call sysconf(), and, if it returns -1, check to see if errno is
199       non-zero.
200
201       Application  developers  should  check  whether  an  option,  such   as
202       _POSIX_TRACE,  is  supported  prior  to  obtaining and using values for
203       related variables, such as _POSIX_TRACE_NAME_MAX.
204

RATIONALE

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

FUTURE DIRECTIONS

279       None.
280

SEE ALSO

282       confstr(), fpathconf()
283
284       The Base Definitions volume of POSIX.1‐2017, <limits.h>, <unistd.h>
285
286       The Shell and Utilities volume of POSIX.1‐2017, getconf
287
289       Portions of this text are reprinted and reproduced in  electronic  form
290       from  IEEE Std 1003.1-2017, Standard for Information Technology -- Por‐
291       table Operating System Interface (POSIX), The Open Group Base  Specifi‐
292       cations  Issue  7, 2018 Edition, Copyright (C) 2018 by the Institute of
293       Electrical and Electronics Engineers, Inc and The Open Group.   In  the
294       event of any discrepancy between this version and the original IEEE and
295       The Open Group Standard, the original IEEE and The Open Group  Standard
296       is  the  referee document. The original Standard can be obtained online
297       at http://www.opengroup.org/unix/online.html .
298
299       Any typographical or formatting errors that appear  in  this  page  are
300       most likely to have been introduced during the conversion of the source
301       files to man page format. To report such errors,  see  https://www.ker
302       nel.org/doc/man-pages/reporting_bugs.html .
303
304
305
306IEEE/The Open Group                  2017                          SYSCONF(3P)
Impressum