1 /*        $NetBSD: unistd.h,v 1.65 2023/10/25 08:22:25 simonb Exp $   */
2 
3 /*
4  * Copyright (c) 1989, 1993
5  *        The Regents of the University of California.  All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. Neither the name of the University nor the names of its contributors
16  *    may be used to endorse or promote products derived from this software
17  *    without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29  * SUCH DAMAGE.
30  *
31  *        @(#)unistd.h        8.2 (Berkeley) 1/7/94
32  */
33 
34 #ifndef _SYS_UNISTD_H_
35 #define   _SYS_UNISTD_H_
36 
37 #include <sys/featuretest.h>
38 
39 /* compile-time symbolic constants */
40 #define   _POSIX_JOB_CONTROL  1
41                                         /* implementation supports job control */
42 
43 /*
44  * According to POSIX 1003.1:
45  * "The saved set-user-ID capability allows a program to regain the
46  * effective user ID established at the last exec call."
47  * However, the setuid/setgid function as specified by POSIX 1003.1 does
48  * not allow changing the effective ID from the super-user without also
49  * changed the saved ID, so it is impossible to get super-user privileges
50  * back later.  Instead we provide this feature independent of the current
51  * effective ID through the seteuid/setegid function.  In addition, we do
52  * not use the saved ID as specified by POSIX 1003.1 in setuid/setgid,
53  * because this would make it impossible for a set-user-ID executable
54  * owned by a user other than the super-user to permanently revoke its
55  * extra privileges.
56  */
57 #ifdef    _NOT_AVAILABLE
58 #define   _POSIX_SAVED_IDS    1
59                                         /* saved set-user-ID and set-group-ID */
60 #endif
61 
62 #define   _POSIX_VERSION                          200112L
63 #define   _POSIX2_VERSION                         200112L
64 
65 /*
66  * We support the posix_spawn() family of functions (unconditionally).
67  */
68 #define   _POSIX_SPAWN                            200809L
69 
70 /* execution-time symbolic constants */
71 
72 /*
73  * POSIX options and option groups we unconditionally do or don't
74  * implement.  Those options which are implemented (or not) entirely
75  * in user mode are defined in <unistd.h>.  Please keep this list in
76  * alphabetical order.
77  *
78  * Anything which is defined as zero below **must** have an
79  * implementation for the corresponding sysconf() which is able to
80  * determine conclusively whether or not the feature is supported.
81  * Anything which is defined as other than -1 below **must** have
82  * complete headers, types, and function declarations as specified by
83  * the POSIX standard; however, if the relevant sysconf() function
84  * returns -1, the functions may be stubbed out.
85  */
86                                                   /* Advisory information */
87 #undef    _POSIX_ADVISORY_INFO
88                                                   /* asynchronous I/O is available */
89 #define   _POSIX_ASYNCHRONOUS_IO                  200112L
90                                                   /* barriers */
91 #define   _POSIX_BARRIERS                         200112L
92                                                   /* chown requires correct privileges */
93 #define   _POSIX_CHOWN_RESTRICTED                 1
94                                                   /* clock selection */
95 #define   _POSIX_CLOCK_SELECTION                  -1
96                                                   /* cputime clock */
97 #define   _POSIX_CPUTIME                          200112L
98                                                   /* CPU type */
99 #undef    _POSIX_CPUTYPE
100                                                   /* file synchronization is available */
101 #define   _POSIX_FSYNC                            1
102                                                   /* support IPv6 */
103 #define   _POSIX_IPV6                             0
104                                                   /* job control is available */
105 #define   _POSIX_JOB_CONTROL            1
106                                                   /* memory mapped files */
107 #define   _POSIX_MAPPED_FILES           1
108                                                   /* memory locking whole address space */
109 #define   _POSIX_MEMLOCK                          1
110                                                   /* memory locking address ranges */
111 #define   _POSIX_MEMLOCK_RANGE                    1
112                                                   /* memory access protections */
113 #define   _POSIX_MEMORY_PROTECTION      1
114                                                   /* message passing is available */
115 #define   _POSIX_MESSAGE_PASSING                  200112L
116                                                   /* monotonic clock */
117 #define   _POSIX_MONOTONIC_CLOCK                  200112L
118                                                   /* too-long path comp generate errors */
119 #define   _POSIX_NO_TRUNC                         1
120                                                   /* prioritized I/O */
121 #define   _POSIX_PRIORITIZED_IO                   -1
122                                                   /* priority scheduling */
123 #define   _POSIX_PRIORITY_SCHEDULING    200112L
124                                                   /* raw sockets */
125 #define   _POSIX_RAW_SOCKETS            200112L
126                                                   /* read/write locks */
127 #define   _POSIX_READER_WRITER_LOCKS    200112L
128                                                   /* realtime signals */
129 #undef    _POSIX_REALTIME_SIGNALS
130                                                   /* regular expressions */
131 #define   _POSIX_REGEXP                           1
132                                                   /* semaphores */
133 #define   _POSIX_SEMAPHORES             0
134                                                   /* shared memory objects */
135 #define   _POSIX_SHARED_MEMORY_OBJECTS  0
136                                                   /* shell */
137 #define   _POSIX_SHELL                            1
138                                                   /* spin locks */
139 #define   _POSIX_SPIN_LOCKS             200112L
140                                                   /* sporadic server */
141 #undef    _POSIX_SPORADIC_SERVER
142                                                   /* synchronized I/O is available */
143 #define   _POSIX_SYNCHRONIZED_IO                  1
144                                                   /* threads */
145 #define   _POSIX_THREADS                          200112L
146                                                   /* pthread_attr for stack size */
147 #define   _POSIX_THREAD_ATTR_STACKSIZE  200112L
148                                                   /* pthread_attr for stack address */
149 #define   _POSIX_THREAD_ATTR_STACKADDR  200112L
150                                                   /* thread cputime clock */
151 #define   _POSIX_THREAD_CPUTIME                   200112L
152                                                   /* _r functions */
153 #define   _POSIX_THREAD_PRIO_PROTECT    200112L
154                                                   /* PTHREAD_PRIO_PROTECT */
155 #define   _POSIX_THREAD_SAFE_FUNCTIONS  200112L
156                                                   /* timeouts */
157 #undef    _POSIX_TIMEOUTS
158                                                   /* timers */
159 #define   _POSIX_TIMERS                           200112L
160                                                   /* typed memory objects */
161 #undef    _POSIX_TYPED_MEMORY_OBJECTS
162                                                   /* may disable terminal spec chars */
163 #define   _POSIX_VDISABLE                         __CAST(unsigned char, '\377')
164 
165                                                   /* C binding */
166 #define   _POSIX2_C_BIND                          200112L
167 
168                                                   /* XPG4.2 shared memory */
169 #define   _XOPEN_SHM                              0
170 
171 /* access function */
172 #define   F_OK                0         /* test for existence of file */
173 #define   X_OK                0x01      /* test for execute or search permission */
174 #define   W_OK                0x02      /* test for write permission */
175 #define   R_OK                0x04      /* test for read permission */
176 
177 /* whence values for lseek(2) */
178 #define   SEEK_SET  0         /* set file offset to offset */
179 #define   SEEK_CUR  1         /* set file offset to current plus offset */
180 #define   SEEK_END  2         /* set file offset to EOF plus offset */
181 
182 #if defined(_NETBSD_SOURCE)
183 /* whence values for lseek(2); renamed by POSIX 1003.1 */
184 #define   L_SET               SEEK_SET
185 #define   L_INCR              SEEK_CUR
186 #define   L_XTND              SEEK_END
187 
188 /*
189  * fsync_range values.
190  *
191  * Note the following flag values were chosen to not overlap
192  * values for SEEK_XXX flags.  While not currently implemented,
193  * it is possible to extend this call to respect SEEK_CUR and
194  * SEEK_END offset addressing modes.
195  */
196 #define   FDATASYNC 0x0010    /* sync data and minimal metadata */
197 #define   FFILESYNC 0x0020    /* sync data and metadata */
198 #define   FDISKSYNC 0x0040    /* flush disk caches after sync */
199 #endif
200 
201 /* configurable pathname variables; use as argument to pathconf(3) */
202 #define   _PC_LINK_MAX                   1
203 #define   _PC_MAX_CANON                  2
204 #define   _PC_MAX_INPUT                  3
205 #define   _PC_NAME_MAX                   4
206 #define   _PC_PATH_MAX                   5
207 #define   _PC_PIPE_BUF                   6
208 #define   _PC_CHOWN_RESTRICTED           7
209 #define   _PC_NO_TRUNC                   8
210 #define   _PC_VDISABLE                   9
211 #define   _PC_SYNC_IO                   10
212 #define   _PC_FILESIZEBITS    11
213 #define   _PC_SYMLINK_MAX               12
214 #define   _PC_2_SYMLINKS                13
215 #define   _PC_ACL_EXTENDED    14
216 
217 /* From OpenSolaris, used by SEEK_DATA/SEEK_HOLE. */
218 #define   _PC_MIN_HOLE_SIZE   15
219 
220 #ifdef _NETBSD_SOURCE
221 #define _PC_ACL_PATH_MAX        16
222 #define _PC_ACL_NFS4            17
223 #endif
224 
225 /* configurable system variables; use as argument to sysconf(3) */
226 /*
227  * XXX The value of _SC_CLK_TCK is embedded in <time.h>.
228  * XXX The value of _SC_PAGESIZE is embedded in <sys/shm.h>.
229  */
230 #define   _SC_ARG_MAX                                1
231 #define   _SC_CHILD_MAX                              2
232 #define   _O_SC_CLK_TCK                              3 /* Old version, always 100 */
233 #define   _SC_NGROUPS_MAX                            4
234 #define   _SC_OPEN_MAX                               5
235 #define   _SC_JOB_CONTROL                            6
236 #define   _SC_SAVED_IDS                              7
237 #define   _SC_VERSION                                8
238 #define   _SC_BC_BASE_MAX                            9
239 #define   _SC_BC_DIM_MAX                            10
240 #define   _SC_BC_SCALE_MAX                11
241 #define   _SC_BC_STRING_MAX               12
242 #define   _SC_COLL_WEIGHTS_MAX                      13
243 #define   _SC_EXPR_NEST_MAX               14
244 #define   _SC_LINE_MAX                              15
245 #define   _SC_RE_DUP_MAX                            16
246 #define   _SC_2_VERSION                             17
247 #define   _SC_2_C_BIND                              18
248 #define   _SC_2_C_DEV                               19
249 #define   _SC_2_CHAR_TERM                           20
250 #define   _SC_2_FORT_DEV                            21
251 #define   _SC_2_FORT_RUN                            22
252 #define   _SC_2_LOCALEDEF                           23
253 #define   _SC_2_SW_DEV                              24
254 #define   _SC_2_UPE                       25
255 #define   _SC_STREAM_MAX                            26
256 #define   _SC_TZNAME_MAX                            27
257 #define   _SC_PAGESIZE                              28
258 #define   _SC_PAGE_SIZE                             _SC_PAGESIZE      /* 1170 compatibility */
259 #define   _SC_FSYNC                       29
260 #define   _SC_XOPEN_SHM                             30
261 #define   _SC_SYNCHRONIZED_IO             31
262 #define   _SC_IOV_MAX                               32
263 #define   _SC_MAPPED_FILES                33
264 #define   _SC_MEMLOCK                               34
265 #define   _SC_MEMLOCK_RANGE               35
266 #define   _SC_MEMORY_PROTECTION                     36
267 #define   _SC_LOGIN_NAME_MAX              37
268 #define   _SC_MONOTONIC_CLOCK             38
269 #define   _SC_CLK_TCK                               39 /* New, variable version */
270 #define   _SC_ATEXIT_MAX                            40
271 #define   _SC_THREADS                               41
272 #define   _SC_SEMAPHORES                            42
273 #define   _SC_BARRIERS                              43
274 #define   _SC_TIMERS                                44
275 #define   _SC_SPIN_LOCKS                            45
276 #define   _SC_READER_WRITER_LOCKS                   46
277 #define   _SC_GETGR_R_SIZE_MAX                      47
278 #define   _SC_GETPW_R_SIZE_MAX                      48
279 #define   _SC_CLOCK_SELECTION             49
280 #define   _SC_ASYNCHRONOUS_IO             50
281 #define   _SC_AIO_LISTIO_MAX              51
282 #define   _SC_AIO_MAX                               52
283 #define   _SC_MESSAGE_PASSING             53
284 #define   _SC_MQ_OPEN_MAX                           54
285 #define   _SC_MQ_PRIO_MAX                           55
286 #define   _SC_PRIORITY_SCHEDULING                   56
287 #define   _SC_THREAD_DESTRUCTOR_ITERATIONS  57
288 #define   _SC_THREAD_KEYS_MAX             58
289 #define   _SC_THREAD_STACK_MIN                      59
290 #define   _SC_THREAD_THREADS_MAX                    60
291 #define   _SC_THREAD_ATTR_STACKADDR       61
292 #define   _SC_THREAD_ATTR_STACKSIZE       62
293 #define   _SC_THREAD_PRIORITY_SCHEDULING            63
294 #define   _SC_THREAD_PRIO_INHERIT         64
295 #define   _SC_THREAD_PRIO_PROTECT                   65
296 #define   _SC_THREAD_PROCESS_SHARED       66
297 #define   _SC_THREAD_SAFE_FUNCTIONS       67
298 #define   _SC_TTY_NAME_MAX                68
299 #define   _SC_HOST_NAME_MAX               69
300 #define   _SC_PASS_MAX                              70
301 #define   _SC_REGEXP                                71
302 #define   _SC_SHELL                       72
303 #define   _SC_SYMLOOP_MAX                           73
304 
305 /* Actually, they are not supported or implemented yet */
306 #define   _SC_V6_ILP32_OFF32              74
307 #define   _SC_V6_ILP32_OFFBIG             75
308 #define   _SC_V6_LP64_OFF64               76
309 #define   _SC_V6_LPBIG_OFFBIG             77
310 #define   _SC_2_PBS                       80
311 #define   _SC_2_PBS_ACCOUNTING                      81
312 #define   _SC_2_PBS_CHECKPOINT                      82
313 #define   _SC_2_PBS_LOCATE                83
314 #define   _SC_2_PBS_MESSAGE               84
315 #define   _SC_2_PBS_TRACK                           85
316 
317 /* These are implemented */
318 #define   _SC_SPAWN                       86
319 #define   _SC_SHARED_MEMORY_OBJECTS       87
320 
321 #define   _SC_TIMER_MAX                             88
322 #define   _SC_SEM_NSEMS_MAX               89
323 #define   _SC_CPUTIME                               90
324 #define   _SC_THREAD_CPUTIME              91
325 #define   _SC_DELAYTIMER_MAX              92
326 #define   _SC_SIGQUEUE_MAX                93
327 #define   _SC_REALTIME_SIGNALS                      94
328 #define   _SC_RTSIG_MAX                             95
329 
330 /* Extensions found in Solaris and Linux. */
331 #define   _SC_PHYS_PAGES                           121
332 #define   _SC_AVPHYS_PAGES               122
333 
334 #ifdef _NETBSD_SOURCE
335 /* Commonly provided sysconf() extensions */
336 #define   _SC_NPROCESSORS_CONF                    1001
337 #define   _SC_NPROCESSORS_ONLN                    1002
338 /* Native variables */
339 #define   _SC_SCHED_RT_TS                         2001
340 #define   _SC_SCHED_PRI_MIN             2002
341 #define   _SC_SCHED_PRI_MAX             2003
342 #endif    /* _NETBSD_SOURCE */
343 
344 /* configurable system strings */
345 #define   _CS_PATH                         1
346 
347 #endif /* !_SYS_UNISTD_H_ */
348