1SYSCONF(3P) POSIX Programmer's Manual SYSCONF(3P)
2
3
4
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
12 sysconf — get configurable system variables
13
15 #include <unistd.h>
16
17 long sysconf(int name);
18
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 ┌─────────────────────────────────┬──────────────────────────────────┐
32 │ Variable │ 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 │
54 │getgrnam_r() data buffers │ │
55 │Initial size of getpwuid_r() and │_SC_GETPW_R_SIZE_MAX │
56 │getpwnam_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 ┌─────────────────────────────┬─────────────────────────────┐
120 │ Variable │ 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 └─────────────────────────────┴─────────────────────────────┘
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
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
193 None.
194
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
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
279 None.
280
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)