Home | History | Annotate | Line # | Download | only in sys
      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