1 /* $NetBSD: unistd.h,v 1.54 2012/11/02 21:41:26 christos 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 #if !defined(__minix) 66 /* 67 * We support the posix_spawn() family of functions (unconditionally). 68 */ 69 #define _POSIX_SPAWN 200809L 70 #endif /* !defined(__minix) */ 71 72 /* execution-time symbolic constants */ 73 74 /* 75 * POSIX options and option groups we unconditionally do or don't 76 * implement. Those options which are implemented (or not) entirely 77 * in user mode are defined in <unistd.h>. Please keep this list in 78 * alphabetical order. 79 * 80 * Anything which is defined as zero below **must** have an 81 * implementation for the corresponding sysconf() which is able to 82 * determine conclusively whether or not the feature is supported. 83 * Anything which is defined as other than -1 below **must** have 84 * complete headers, types, and function declarations as specified by 85 * the POSIX standard; however, if the relevant sysconf() function 86 * returns -1, the functions may be stubbed out. 87 */ 88 /* Advisory information */ 89 #undef _POSIX_ADVISORY_INFO 90 /* asynchronous I/O is available */ 91 #define _POSIX_ASYNCHRONOUS_IO 200112L 92 /* barriers */ 93 #define _POSIX_BARRIERS 200112L 94 /* chown requires correct privileges */ 95 #define _POSIX_CHOWN_RESTRICTED 1 96 /* clock selection */ 97 #define _POSIX_CLOCK_SELECTION -1 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 */ 135 #undef _POSIX_SHARED_MEMORY_OBJECTS 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 /* _r functions */ 151 #define _POSIX_THREAD_SAFE_FUNCTIONS 200112L 152 /* timeouts */ 153 #undef _POSIX_TIMEOUTS 154 /* timers */ 155 #define _POSIX_TIMERS 200112L 156 /* typed memory objects */ 157 #undef _POSIX_TYPED_MEMORY_OBJECTS 158 /* may disable terminal spec chars */ 159 #define _POSIX_VDISABLE __CAST(unsigned char, '\377') 160 161 /* C binding */ 162 #define _POSIX2_C_BIND 200112L 163 164 /* XPG4.2 shared memory */ 165 #define _XOPEN_SHM 0 166 167 /* access function */ 168 #define F_OK 0 /* test for existence of file */ 169 #define X_OK 0x01 /* test for execute or search permission */ 170 #define W_OK 0x02 /* test for write permission */ 171 #define R_OK 0x04 /* test for read permission */ 172 173 /* whence values for lseek(2) */ 174 #define SEEK_SET 0 /* set file offset to offset */ 175 #define SEEK_CUR 1 /* set file offset to current plus offset */ 176 #define SEEK_END 2 /* set file offset to EOF plus offset */ 177 178 #if defined(_NETBSD_SOURCE) 179 /* whence values for lseek(2); renamed by POSIX 1003.1 */ 180 #define L_SET SEEK_SET 181 #define L_INCR SEEK_CUR 182 #define L_XTND SEEK_END 183 184 /* 185 * fsync_range values. 186 * 187 * Note the following flag values were chosen to not overlap 188 * values for SEEK_XXX flags. While not currently implemented, 189 * it is possible to extend this call to respect SEEK_CUR and 190 * SEEK_END offset addressing modes. 191 */ 192 #define FDATASYNC 0x0010 /* sync data and minimal metadata */ 193 #define FFILESYNC 0x0020 /* sync data and metadata */ 194 #define FDISKSYNC 0x0040 /* flush disk caches after sync */ 195 #endif 196 197 /* configurable pathname variables; use as argument to pathconf(3) */ 198 #define _PC_LINK_MAX 1 199 #define _PC_MAX_CANON 2 200 #define _PC_MAX_INPUT 3 201 #define _PC_NAME_MAX 4 202 #define _PC_PATH_MAX 5 203 #define _PC_PIPE_BUF 6 204 #define _PC_CHOWN_RESTRICTED 7 205 #define _PC_NO_TRUNC 8 206 #define _PC_VDISABLE 9 207 #define _PC_SYNC_IO 10 208 #define _PC_FILESIZEBITS 11 209 #define _PC_SYMLINK_MAX 12 210 #define _PC_2_SYMLINKS 13 211 #define _PC_ACL_EXTENDED 14 212 213 /* From OpenSolaris, used by SEEK_DATA/SEEK_HOLE. */ 214 #define _PC_MIN_HOLE_SIZE 15 215 216 /* configurable system variables; use as argument to sysconf(3) */ 217 /* 218 * XXX The value of _SC_CLK_TCK is embedded in <time.h>. 219 * XXX The value of _SC_PAGESIZE is embedded in <sys/shm.h>. 220 */ 221 #define _SC_ARG_MAX 1 222 #define _SC_CHILD_MAX 2 223 #define _O_SC_CLK_TCK 3 /* Old version, always 100 */ 224 #define _SC_NGROUPS_MAX 4 225 #define _SC_OPEN_MAX 5 226 #define _SC_JOB_CONTROL 6 227 #define _SC_SAVED_IDS 7 228 #define _SC_VERSION 8 229 #define _SC_BC_BASE_MAX 9 230 #define _SC_BC_DIM_MAX 10 231 #define _SC_BC_SCALE_MAX 11 232 #define _SC_BC_STRING_MAX 12 233 #define _SC_COLL_WEIGHTS_MAX 13 234 #define _SC_EXPR_NEST_MAX 14 235 #define _SC_LINE_MAX 15 236 #define _SC_RE_DUP_MAX 16 237 #define _SC_2_VERSION 17 238 #define _SC_2_C_BIND 18 239 #define _SC_2_C_DEV 19 240 #define _SC_2_CHAR_TERM 20 241 #define _SC_2_FORT_DEV 21 242 #define _SC_2_FORT_RUN 22 243 #define _SC_2_LOCALEDEF 23 244 #define _SC_2_SW_DEV 24 245 #define _SC_2_UPE 25 246 #define _SC_STREAM_MAX 26 247 #define _SC_TZNAME_MAX 27 248 #define _SC_PAGESIZE 28 249 #define _SC_PAGE_SIZE _SC_PAGESIZE /* 1170 compatibility */ 250 #define _SC_FSYNC 29 251 #define _SC_XOPEN_SHM 30 252 #define _SC_SYNCHRONIZED_IO 31 253 #define _SC_IOV_MAX 32 254 #define _SC_MAPPED_FILES 33 255 #define _SC_MEMLOCK 34 256 #define _SC_MEMLOCK_RANGE 35 257 #define _SC_MEMORY_PROTECTION 36 258 #define _SC_LOGIN_NAME_MAX 37 259 #define _SC_MONOTONIC_CLOCK 38 260 #define _SC_CLK_TCK 39 /* New, variable version */ 261 #define _SC_ATEXIT_MAX 40 262 #define _SC_THREADS 41 263 #define _SC_SEMAPHORES 42 264 #define _SC_BARRIERS 43 265 #define _SC_TIMERS 44 266 #define _SC_SPIN_LOCKS 45 267 #define _SC_READER_WRITER_LOCKS 46 268 #define _SC_GETGR_R_SIZE_MAX 47 269 #define _SC_GETPW_R_SIZE_MAX 48 270 #define _SC_CLOCK_SELECTION 49 271 #define _SC_ASYNCHRONOUS_IO 50 272 #define _SC_AIO_LISTIO_MAX 51 273 #define _SC_AIO_MAX 52 274 #define _SC_MESSAGE_PASSING 53 275 #define _SC_MQ_OPEN_MAX 54 276 #define _SC_MQ_PRIO_MAX 55 277 #define _SC_PRIORITY_SCHEDULING 56 278 #define _SC_THREAD_DESTRUCTOR_ITERATIONS 57 279 #define _SC_THREAD_KEYS_MAX 58 280 #define _SC_THREAD_STACK_MIN 59 281 #define _SC_THREAD_THREADS_MAX 60 282 #define _SC_THREAD_ATTR_STACKADDR 61 283 #define _SC_THREAD_ATTR_STACKSIZE 62 284 #define _SC_THREAD_PRIORITY_SCHEDULING 63 285 #define _SC_THREAD_PRIO_INHERIT 64 286 #define _SC_THREAD_PRIO_PROTECT 65 287 #define _SC_THREAD_PROCESS_SHARED 66 288 #define _SC_THREAD_SAFE_FUNCTIONS 67 289 #define _SC_TTY_NAME_MAX 68 290 #define _SC_HOST_NAME_MAX 69 291 #define _SC_PASS_MAX 70 292 #define _SC_REGEXP 71 293 #define _SC_SHELL 72 294 #define _SC_SYMLOOP_MAX 73 295 296 /* Actually, they are not supported or implemented yet */ 297 #define _SC_V6_ILP32_OFF32 74 298 #define _SC_V6_ILP32_OFFBIG 75 299 #define _SC_V6_LP64_OFF64 76 300 #define _SC_V6_LPBIG_OFFBIG 77 301 #define _SC_2_PBS 80 302 #define _SC_2_PBS_ACCOUNTING 81 303 #define _SC_2_PBS_CHECKPOINT 82 304 #define _SC_2_PBS_LOCATE 83 305 #define _SC_2_PBS_MESSAGE 84 306 #define _SC_2_PBS_TRACK 85 307 308 /* This is implemented */ 309 #define _SC_SPAWN 86 310 311 /* Extensions found in Solaris and Linux. */ 312 #define _SC_PHYS_PAGES 121 313 314 #ifdef _NETBSD_SOURCE 315 /* Commonly provided sysconf() extensions */ 316 #define _SC_NPROCESSORS_CONF 1001 317 #define _SC_NPROCESSORS_ONLN 1002 318 /* Native variables */ 319 #define _SC_SCHED_RT_TS 2001 320 #define _SC_SCHED_PRI_MIN 2002 321 #define _SC_SCHED_PRI_MAX 2003 322 #endif /* _NETBSD_SOURCE */ 323 324 /* configurable system strings */ 325 #define _CS_PATH 1 326 327 #endif /* !_SYS_UNISTD_H_ */ 328