1*53ee8cc1Swenshuai.xi /* Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc. 2*53ee8cc1Swenshuai.xi This file is part of the GNU C Library. 3*53ee8cc1Swenshuai.xi 4*53ee8cc1Swenshuai.xi The GNU C Library is free software; you can redistribute it and/or 5*53ee8cc1Swenshuai.xi modify it under the terms of the GNU Lesser General Public 6*53ee8cc1Swenshuai.xi License as published by the Free Software Foundation; either 7*53ee8cc1Swenshuai.xi version 2.1 of the License, or (at your option) any later version. 8*53ee8cc1Swenshuai.xi 9*53ee8cc1Swenshuai.xi The GNU C Library is distributed in the hope that it will be useful, 10*53ee8cc1Swenshuai.xi but WITHOUT ANY WARRANTY; without even the implied warranty of 11*53ee8cc1Swenshuai.xi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12*53ee8cc1Swenshuai.xi Lesser General Public License for more details. 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi You should have received a copy of the GNU Lesser General Public 15*53ee8cc1Swenshuai.xi License along with the GNU C Library; if not, write to the Free 16*53ee8cc1Swenshuai.xi Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 17*53ee8cc1Swenshuai.xi 02111-1307 USA. */ 18*53ee8cc1Swenshuai.xi 19*53ee8cc1Swenshuai.xi /* 20*53ee8cc1Swenshuai.xi * POSIX Standard: 2.10 Symbolic Constants <unistd.h> 21*53ee8cc1Swenshuai.xi */ 22*53ee8cc1Swenshuai.xi 23*53ee8cc1Swenshuai.xi #ifndef _UNISTD_H 24*53ee8cc1Swenshuai.xi #define _UNISTD_H 1 25*53ee8cc1Swenshuai.xi 26*53ee8cc1Swenshuai.xi #include <features.h> 27*53ee8cc1Swenshuai.xi 28*53ee8cc1Swenshuai.xi __BEGIN_DECLS 29*53ee8cc1Swenshuai.xi 30*53ee8cc1Swenshuai.xi /* These may be used to determine what facilities are present at compile time. 31*53ee8cc1Swenshuai.xi Their values can be obtained at run time from `sysconf'. */ 32*53ee8cc1Swenshuai.xi 33*53ee8cc1Swenshuai.xi /* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001. */ 34*53ee8cc1Swenshuai.xi #define _POSIX_VERSION 200112L 35*53ee8cc1Swenshuai.xi 36*53ee8cc1Swenshuai.xi /* These are not #ifdef __USE_POSIX2 because they are 37*53ee8cc1Swenshuai.xi in the theoretically application-owned namespace. */ 38*53ee8cc1Swenshuai.xi 39*53ee8cc1Swenshuai.xi /* The utilities on GNU systems also correspond to this version. */ 40*53ee8cc1Swenshuai.xi #define _POSIX2_VERSION 200112L 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* If defined, the implementation supports the 43*53ee8cc1Swenshuai.xi C Language Bindings Option. */ 44*53ee8cc1Swenshuai.xi #define _POSIX2_C_BIND 200112L 45*53ee8cc1Swenshuai.xi 46*53ee8cc1Swenshuai.xi /* If defined, the implementation supports the 47*53ee8cc1Swenshuai.xi C Language Development Utilities Option. */ 48*53ee8cc1Swenshuai.xi #define _POSIX2_C_DEV 200112L 49*53ee8cc1Swenshuai.xi 50*53ee8cc1Swenshuai.xi /* If defined, the implementation supports the 51*53ee8cc1Swenshuai.xi Software Development Utilities Option. */ 52*53ee8cc1Swenshuai.xi #define _POSIX2_SW_DEV 200112L 53*53ee8cc1Swenshuai.xi 54*53ee8cc1Swenshuai.xi /* If defined, the implementation supports the 55*53ee8cc1Swenshuai.xi creation of locales with the localedef utility. */ 56*53ee8cc1Swenshuai.xi #define _POSIX2_LOCALEDEF 200112L 57*53ee8cc1Swenshuai.xi 58*53ee8cc1Swenshuai.xi /* X/Open version number to which the library conforms. It is selectable. */ 59*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN2K 60*53ee8cc1Swenshuai.xi # define _XOPEN_VERSION 600 61*53ee8cc1Swenshuai.xi #elif defined __USE_UNIX98 62*53ee8cc1Swenshuai.xi # define _XOPEN_VERSION 500 63*53ee8cc1Swenshuai.xi #else 64*53ee8cc1Swenshuai.xi # define _XOPEN_VERSION 4 65*53ee8cc1Swenshuai.xi #endif 66*53ee8cc1Swenshuai.xi 67*53ee8cc1Swenshuai.xi /* Commands and utilities from XPG4 are available. */ 68*53ee8cc1Swenshuai.xi #define _XOPEN_XCU_VERSION 4 69*53ee8cc1Swenshuai.xi 70*53ee8cc1Swenshuai.xi /* We are compatible with the old published standards as well. */ 71*53ee8cc1Swenshuai.xi #define _XOPEN_XPG2 1 72*53ee8cc1Swenshuai.xi #define _XOPEN_XPG3 1 73*53ee8cc1Swenshuai.xi #define _XOPEN_XPG4 1 74*53ee8cc1Swenshuai.xi 75*53ee8cc1Swenshuai.xi /* The X/Open Unix extensions are available. */ 76*53ee8cc1Swenshuai.xi #define _XOPEN_UNIX 1 77*53ee8cc1Swenshuai.xi 78*53ee8cc1Swenshuai.xi /* Encryption is present. */ 79*53ee8cc1Swenshuai.xi #define _XOPEN_CRYPT 1 80*53ee8cc1Swenshuai.xi 81*53ee8cc1Swenshuai.xi /* The enhanced internationalization capabilities according to XPG4.2 82*53ee8cc1Swenshuai.xi are present. */ 83*53ee8cc1Swenshuai.xi #define _XOPEN_ENH_I18N 1 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi /* The legacy interfaces are also available. */ 86*53ee8cc1Swenshuai.xi #define _XOPEN_LEGACY 1 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi 89*53ee8cc1Swenshuai.xi /* Get values of POSIX options: 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi If these symbols are defined, the corresponding features are 92*53ee8cc1Swenshuai.xi always available. If not, they may be available sometimes. 93*53ee8cc1Swenshuai.xi The current values can be obtained with `sysconf'. 94*53ee8cc1Swenshuai.xi 95*53ee8cc1Swenshuai.xi _POSIX_JOB_CONTROL Job control is supported. 96*53ee8cc1Swenshuai.xi _POSIX_SAVED_IDS Processes have a saved set-user-ID 97*53ee8cc1Swenshuai.xi and a saved set-group-ID. 98*53ee8cc1Swenshuai.xi _POSIX_REALTIME_SIGNALS Real-time, queued signals are supported. 99*53ee8cc1Swenshuai.xi _POSIX_PRIORITY_SCHEDULING Priority scheduling is supported. 100*53ee8cc1Swenshuai.xi _POSIX_TIMERS POSIX.4 clocks and timers are supported. 101*53ee8cc1Swenshuai.xi _POSIX_ASYNCHRONOUS_IO Asynchronous I/O is supported. 102*53ee8cc1Swenshuai.xi _POSIX_PRIORITIZED_IO Prioritized asynchronous I/O is supported. 103*53ee8cc1Swenshuai.xi _POSIX_SYNCHRONIZED_IO Synchronizing file data is supported. 104*53ee8cc1Swenshuai.xi _POSIX_FSYNC The fsync function is present. 105*53ee8cc1Swenshuai.xi _POSIX_MAPPED_FILES Mapping of files to memory is supported. 106*53ee8cc1Swenshuai.xi _POSIX_MEMLOCK Locking of all memory is supported. 107*53ee8cc1Swenshuai.xi _POSIX_MEMLOCK_RANGE Locking of ranges of memory is supported. 108*53ee8cc1Swenshuai.xi _POSIX_MEMORY_PROTECTION Setting of memory protections is supported. 109*53ee8cc1Swenshuai.xi _POSIX_MESSAGE_PASSING POSIX.4 message queues are supported. 110*53ee8cc1Swenshuai.xi _POSIX_SEMAPHORES POSIX.4 counting semaphores are supported. 111*53ee8cc1Swenshuai.xi _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported. 112*53ee8cc1Swenshuai.xi _POSIX_THREADS POSIX.1c pthreads are supported. 113*53ee8cc1Swenshuai.xi _POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported. 114*53ee8cc1Swenshuai.xi _POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported. 115*53ee8cc1Swenshuai.xi _POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported. 116*53ee8cc1Swenshuai.xi _POSIX_THREAD_PRIORITY_SCHEDULING 117*53ee8cc1Swenshuai.xi POSIX.1c thread execution scheduling supported. 118*53ee8cc1Swenshuai.xi _POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported. 119*53ee8cc1Swenshuai.xi _POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported. 120*53ee8cc1Swenshuai.xi _POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported. 121*53ee8cc1Swenshuai.xi _POSIX_PII Protocol-independent interfaces are supported. 122*53ee8cc1Swenshuai.xi _POSIX_PII_XTI XTI protocol-indep. interfaces are supported. 123*53ee8cc1Swenshuai.xi _POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported. 124*53ee8cc1Swenshuai.xi _POSIX_PII_INTERNET Internet family of protocols supported. 125*53ee8cc1Swenshuai.xi _POSIX_PII_INTERNET_STREAM Connection-mode Internet protocol supported. 126*53ee8cc1Swenshuai.xi _POSIX_PII_INTERNET_DGRAM Connectionless Internet protocol supported. 127*53ee8cc1Swenshuai.xi _POSIX_PII_OSI ISO/OSI family of protocols supported. 128*53ee8cc1Swenshuai.xi _POSIX_PII_OSI_COTS Connection-mode ISO/OSI service supported. 129*53ee8cc1Swenshuai.xi _POSIX_PII_OSI_CLTS Connectionless ISO/OSI service supported. 130*53ee8cc1Swenshuai.xi _POSIX_POLL Implementation supports `poll' function. 131*53ee8cc1Swenshuai.xi _POSIX_SELECT Implementation supports `select' and `pselect'. 132*53ee8cc1Swenshuai.xi 133*53ee8cc1Swenshuai.xi _XOPEN_REALTIME X/Open realtime support is available. 134*53ee8cc1Swenshuai.xi _XOPEN_REALTIME_THREADS X/Open realtime thread support is available. 135*53ee8cc1Swenshuai.xi _XOPEN_SHM Shared memory interface according to XPG4.2. 136*53ee8cc1Swenshuai.xi 137*53ee8cc1Swenshuai.xi _XBS5_ILP32_OFF32 Implementation provides environment with 32-bit 138*53ee8cc1Swenshuai.xi int, long, pointer, and off_t types. 139*53ee8cc1Swenshuai.xi _XBS5_ILP32_OFFBIG Implementation provides environment with 32-bit 140*53ee8cc1Swenshuai.xi int, long, and pointer and off_t with at least 141*53ee8cc1Swenshuai.xi 64 bits. 142*53ee8cc1Swenshuai.xi _XBS5_LP64_OFF64 Implementation provides environment with 32-bit 143*53ee8cc1Swenshuai.xi int, and 64-bit long, pointer, and off_t types. 144*53ee8cc1Swenshuai.xi _XBS5_LPBIG_OFFBIG Implementation provides environment with at 145*53ee8cc1Swenshuai.xi least 32 bits int and long, pointer, and off_t 146*53ee8cc1Swenshuai.xi with at least 64 bits. 147*53ee8cc1Swenshuai.xi 148*53ee8cc1Swenshuai.xi If any of these symbols is defined as -1, the corresponding option is not 149*53ee8cc1Swenshuai.xi true for any file. If any is defined as other than -1, the corresponding 150*53ee8cc1Swenshuai.xi option is true for all files. If a symbol is not defined at all, the value 151*53ee8cc1Swenshuai.xi for a specific file can be obtained from `pathconf' and `fpathconf'. 152*53ee8cc1Swenshuai.xi 153*53ee8cc1Swenshuai.xi _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change 154*53ee8cc1Swenshuai.xi the owner of a file. `chown' can only be used 155*53ee8cc1Swenshuai.xi to change the group ID of a file to a group of 156*53ee8cc1Swenshuai.xi which the calling process is a member. 157*53ee8cc1Swenshuai.xi _POSIX_NO_TRUNC Pathname components longer than 158*53ee8cc1Swenshuai.xi NAME_MAX generate an error. 159*53ee8cc1Swenshuai.xi _POSIX_VDISABLE If defined, if the value of an element of the 160*53ee8cc1Swenshuai.xi `c_cc' member of `struct termios' is 161*53ee8cc1Swenshuai.xi _POSIX_VDISABLE, no character will have the 162*53ee8cc1Swenshuai.xi effect associated with that element. 163*53ee8cc1Swenshuai.xi _POSIX_SYNC_IO Synchronous I/O may be performed. 164*53ee8cc1Swenshuai.xi _POSIX_ASYNC_IO Asynchronous I/O may be performed. 165*53ee8cc1Swenshuai.xi _POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed. 166*53ee8cc1Swenshuai.xi 167*53ee8cc1Swenshuai.xi Support for the Large File Support interface is not generally available. 168*53ee8cc1Swenshuai.xi If it is available the following constants are defined to one. 169*53ee8cc1Swenshuai.xi _LFS64_LARGEFILE Low-level I/O supports large files. 170*53ee8cc1Swenshuai.xi _LFS64_STDIO Standard I/O supports large files. 171*53ee8cc1Swenshuai.xi */ 172*53ee8cc1Swenshuai.xi 173*53ee8cc1Swenshuai.xi #include <bits/posix_opt.h> 174*53ee8cc1Swenshuai.xi 175*53ee8cc1Swenshuai.xi /* Get the environment definitions from Unix98. */ 176*53ee8cc1Swenshuai.xi #ifdef __USE_UNIX98 177*53ee8cc1Swenshuai.xi # include <bits/environments.h> 178*53ee8cc1Swenshuai.xi #endif 179*53ee8cc1Swenshuai.xi 180*53ee8cc1Swenshuai.xi /* Standard file descriptors. */ 181*53ee8cc1Swenshuai.xi #define STDIN_FILENO 0 /* Standard input. */ 182*53ee8cc1Swenshuai.xi #define STDOUT_FILENO 1 /* Standard output. */ 183*53ee8cc1Swenshuai.xi #define STDERR_FILENO 2 /* Standard error output. */ 184*53ee8cc1Swenshuai.xi 185*53ee8cc1Swenshuai.xi 186*53ee8cc1Swenshuai.xi /* All functions that are not declared anywhere else. */ 187*53ee8cc1Swenshuai.xi 188*53ee8cc1Swenshuai.xi #include <bits/types.h> 189*53ee8cc1Swenshuai.xi 190*53ee8cc1Swenshuai.xi #ifndef __ssize_t_defined 191*53ee8cc1Swenshuai.xi typedef __ssize_t ssize_t; 192*53ee8cc1Swenshuai.xi # define __ssize_t_defined 193*53ee8cc1Swenshuai.xi #endif 194*53ee8cc1Swenshuai.xi 195*53ee8cc1Swenshuai.xi #define __need_size_t 196*53ee8cc1Swenshuai.xi #define __need_NULL 197*53ee8cc1Swenshuai.xi #include <stddef.h> 198*53ee8cc1Swenshuai.xi 199*53ee8cc1Swenshuai.xi #if defined __USE_XOPEN || defined __USE_XOPEN2K 200*53ee8cc1Swenshuai.xi /* The Single Unix specification says that some more types are 201*53ee8cc1Swenshuai.xi available here. */ 202*53ee8cc1Swenshuai.xi # ifndef __gid_t_defined 203*53ee8cc1Swenshuai.xi typedef __gid_t gid_t; 204*53ee8cc1Swenshuai.xi # define __gid_t_defined 205*53ee8cc1Swenshuai.xi # endif 206*53ee8cc1Swenshuai.xi 207*53ee8cc1Swenshuai.xi # ifndef __uid_t_defined 208*53ee8cc1Swenshuai.xi typedef __uid_t uid_t; 209*53ee8cc1Swenshuai.xi # define __uid_t_defined 210*53ee8cc1Swenshuai.xi # endif 211*53ee8cc1Swenshuai.xi 212*53ee8cc1Swenshuai.xi # ifndef __off_t_defined 213*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 214*53ee8cc1Swenshuai.xi typedef __off_t off_t; 215*53ee8cc1Swenshuai.xi # else 216*53ee8cc1Swenshuai.xi typedef __off64_t off_t; 217*53ee8cc1Swenshuai.xi # endif 218*53ee8cc1Swenshuai.xi # define __off_t_defined 219*53ee8cc1Swenshuai.xi # endif 220*53ee8cc1Swenshuai.xi # if defined __USE_LARGEFILE64 && !defined __off64_t_defined 221*53ee8cc1Swenshuai.xi typedef __off64_t off64_t; 222*53ee8cc1Swenshuai.xi # define __off64_t_defined 223*53ee8cc1Swenshuai.xi # endif 224*53ee8cc1Swenshuai.xi 225*53ee8cc1Swenshuai.xi # ifndef __useconds_t_defined 226*53ee8cc1Swenshuai.xi typedef __useconds_t useconds_t; 227*53ee8cc1Swenshuai.xi # define __useconds_t_defined 228*53ee8cc1Swenshuai.xi # endif 229*53ee8cc1Swenshuai.xi 230*53ee8cc1Swenshuai.xi # ifndef __pid_t_defined 231*53ee8cc1Swenshuai.xi typedef __pid_t pid_t; 232*53ee8cc1Swenshuai.xi # define __pid_t_defined 233*53ee8cc1Swenshuai.xi # endif 234*53ee8cc1Swenshuai.xi #endif /* X/Open */ 235*53ee8cc1Swenshuai.xi 236*53ee8cc1Swenshuai.xi #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED 237*53ee8cc1Swenshuai.xi # ifndef __intptr_t_defined 238*53ee8cc1Swenshuai.xi typedef __intptr_t intptr_t; 239*53ee8cc1Swenshuai.xi # define __intptr_t_defined 240*53ee8cc1Swenshuai.xi # endif 241*53ee8cc1Swenshuai.xi #endif 242*53ee8cc1Swenshuai.xi 243*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN 244*53ee8cc1Swenshuai.xi # ifndef __socklen_t_defined 245*53ee8cc1Swenshuai.xi typedef __socklen_t socklen_t; 246*53ee8cc1Swenshuai.xi # define __socklen_t_defined 247*53ee8cc1Swenshuai.xi # endif 248*53ee8cc1Swenshuai.xi #endif 249*53ee8cc1Swenshuai.xi 250*53ee8cc1Swenshuai.xi /* Values for the second argument to access. 251*53ee8cc1Swenshuai.xi These may be OR'd together. */ 252*53ee8cc1Swenshuai.xi #define R_OK 4 /* Test for read permission. */ 253*53ee8cc1Swenshuai.xi #define W_OK 2 /* Test for write permission. */ 254*53ee8cc1Swenshuai.xi #define X_OK 1 /* Test for execute permission. */ 255*53ee8cc1Swenshuai.xi #define F_OK 0 /* Test for existence. */ 256*53ee8cc1Swenshuai.xi 257*53ee8cc1Swenshuai.xi /* Test for access to NAME using the real UID and real GID. */ 258*53ee8cc1Swenshuai.xi extern int access (__const char *__name, int __type) __THROW __nonnull ((1)); 259*53ee8cc1Swenshuai.xi 260*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 261*53ee8cc1Swenshuai.xi /* Test for access to NAME using the effective UID and GID 262*53ee8cc1Swenshuai.xi (as normal file operations use). */ 263*53ee8cc1Swenshuai.xi extern int euidaccess (__const char *__name, int __type) 264*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 265*53ee8cc1Swenshuai.xi 266*53ee8cc1Swenshuai.xi /* An alias for `euidaccess', used by some other systems. */ 267*53ee8cc1Swenshuai.xi extern int eaccess (__const char *__name, int __type) 268*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 269*53ee8cc1Swenshuai.xi #endif 270*53ee8cc1Swenshuai.xi 271*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE 272*53ee8cc1Swenshuai.xi /* Test for access to FILE relative to the directory FD is open on. 273*53ee8cc1Swenshuai.xi If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess', 274*53ee8cc1Swenshuai.xi otherwise use real IDs like `access'. */ 275*53ee8cc1Swenshuai.xi extern int faccessat (int __fd, __const char *__file, int __type, int __flag) 276*53ee8cc1Swenshuai.xi __THROW __nonnull ((2)) __wur; 277*53ee8cc1Swenshuai.xi #endif /* Use GNU. */ 278*53ee8cc1Swenshuai.xi 279*53ee8cc1Swenshuai.xi 280*53ee8cc1Swenshuai.xi /* Values for the WHENCE argument to lseek. */ 281*53ee8cc1Swenshuai.xi #ifndef _STDIO_H /* <stdio.h> has the same definitions. */ 282*53ee8cc1Swenshuai.xi # define SEEK_SET 0 /* Seek from beginning of file. */ 283*53ee8cc1Swenshuai.xi # define SEEK_CUR 1 /* Seek from current position. */ 284*53ee8cc1Swenshuai.xi # define SEEK_END 2 /* Seek from end of file. */ 285*53ee8cc1Swenshuai.xi #endif 286*53ee8cc1Swenshuai.xi 287*53ee8cc1Swenshuai.xi #if defined __USE_BSD && !defined L_SET 288*53ee8cc1Swenshuai.xi /* Old BSD names for the same constants; just for compatibility. */ 289*53ee8cc1Swenshuai.xi # define L_SET SEEK_SET 290*53ee8cc1Swenshuai.xi # define L_INCR SEEK_CUR 291*53ee8cc1Swenshuai.xi # define L_XTND SEEK_END 292*53ee8cc1Swenshuai.xi #endif 293*53ee8cc1Swenshuai.xi 294*53ee8cc1Swenshuai.xi 295*53ee8cc1Swenshuai.xi /* Move FD's file position to OFFSET bytes from the 296*53ee8cc1Swenshuai.xi beginning of the file (if WHENCE is SEEK_SET), 297*53ee8cc1Swenshuai.xi the current position (if WHENCE is SEEK_CUR), 298*53ee8cc1Swenshuai.xi or the end of the file (if WHENCE is SEEK_END). 299*53ee8cc1Swenshuai.xi Return the new file position. */ 300*53ee8cc1Swenshuai.xi #ifndef __USE_FILE_OFFSET64 301*53ee8cc1Swenshuai.xi extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW; 302*53ee8cc1Swenshuai.xi #else 303*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 304*53ee8cc1Swenshuai.xi extern __off64_t __REDIRECT_NTH (lseek, 305*53ee8cc1Swenshuai.xi (int __fd, __off64_t __offset, int __whence), 306*53ee8cc1Swenshuai.xi lseek64); 307*53ee8cc1Swenshuai.xi # else 308*53ee8cc1Swenshuai.xi # define lseek lseek64 309*53ee8cc1Swenshuai.xi # endif 310*53ee8cc1Swenshuai.xi #endif 311*53ee8cc1Swenshuai.xi #ifdef __USE_LARGEFILE64 312*53ee8cc1Swenshuai.xi extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) 313*53ee8cc1Swenshuai.xi __THROW; 314*53ee8cc1Swenshuai.xi #endif 315*53ee8cc1Swenshuai.xi 316*53ee8cc1Swenshuai.xi /* Close the file descriptor FD. 317*53ee8cc1Swenshuai.xi 318*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 319*53ee8cc1Swenshuai.xi __THROW. */ 320*53ee8cc1Swenshuai.xi extern int close (int __fd); 321*53ee8cc1Swenshuai.xi 322*53ee8cc1Swenshuai.xi /* Read NBYTES into BUF from FD. Return the 323*53ee8cc1Swenshuai.xi number read, -1 for errors or 0 for EOF. 324*53ee8cc1Swenshuai.xi 325*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 326*53ee8cc1Swenshuai.xi __THROW. */ 327*53ee8cc1Swenshuai.xi extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur; 328*53ee8cc1Swenshuai.xi 329*53ee8cc1Swenshuai.xi /* Write N bytes of BUF to FD. Return the number written, or -1. 330*53ee8cc1Swenshuai.xi 331*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 332*53ee8cc1Swenshuai.xi __THROW. */ 333*53ee8cc1Swenshuai.xi extern ssize_t write (int __fd, __const void *__buf, size_t __n) __wur; 334*53ee8cc1Swenshuai.xi 335*53ee8cc1Swenshuai.xi #ifdef __USE_UNIX98 336*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 337*53ee8cc1Swenshuai.xi /* Read NBYTES into BUF from FD at the given position OFFSET without 338*53ee8cc1Swenshuai.xi changing the file pointer. Return the number read, -1 for errors 339*53ee8cc1Swenshuai.xi or 0 for EOF. 340*53ee8cc1Swenshuai.xi 341*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 342*53ee8cc1Swenshuai.xi __THROW. */ 343*53ee8cc1Swenshuai.xi extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, 344*53ee8cc1Swenshuai.xi __off_t __offset) __wur; 345*53ee8cc1Swenshuai.xi 346*53ee8cc1Swenshuai.xi /* Write N bytes of BUF to FD at the given position OFFSET without 347*53ee8cc1Swenshuai.xi changing the file pointer. Return the number written, or -1. 348*53ee8cc1Swenshuai.xi 349*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 350*53ee8cc1Swenshuai.xi __THROW. */ 351*53ee8cc1Swenshuai.xi extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n, 352*53ee8cc1Swenshuai.xi __off_t __offset) __wur; 353*53ee8cc1Swenshuai.xi # else 354*53ee8cc1Swenshuai.xi # ifdef __REDIRECT 355*53ee8cc1Swenshuai.xi extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes, 356*53ee8cc1Swenshuai.xi __off64_t __offset), 357*53ee8cc1Swenshuai.xi pread64) __wur; 358*53ee8cc1Swenshuai.xi extern ssize_t __REDIRECT (pwrite, (int __fd, __const void *__buf, 359*53ee8cc1Swenshuai.xi size_t __nbytes, __off64_t __offset), 360*53ee8cc1Swenshuai.xi pwrite64) __wur; 361*53ee8cc1Swenshuai.xi # else 362*53ee8cc1Swenshuai.xi # define pread pread64 363*53ee8cc1Swenshuai.xi # define pwrite pwrite64 364*53ee8cc1Swenshuai.xi # endif 365*53ee8cc1Swenshuai.xi # endif 366*53ee8cc1Swenshuai.xi 367*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 368*53ee8cc1Swenshuai.xi /* Read NBYTES into BUF from FD at the given position OFFSET without 369*53ee8cc1Swenshuai.xi changing the file pointer. Return the number read, -1 for errors 370*53ee8cc1Swenshuai.xi or 0 for EOF. */ 371*53ee8cc1Swenshuai.xi extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, 372*53ee8cc1Swenshuai.xi __off64_t __offset) __wur; 373*53ee8cc1Swenshuai.xi /* Write N bytes of BUF to FD at the given position OFFSET without 374*53ee8cc1Swenshuai.xi changing the file pointer. Return the number written, or -1. */ 375*53ee8cc1Swenshuai.xi extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n, 376*53ee8cc1Swenshuai.xi __off64_t __offset) __wur; 377*53ee8cc1Swenshuai.xi # endif 378*53ee8cc1Swenshuai.xi #endif 379*53ee8cc1Swenshuai.xi 380*53ee8cc1Swenshuai.xi /* Create a one-way communication channel (pipe). 381*53ee8cc1Swenshuai.xi If successful, two file descriptors are stored in PIPEDES; 382*53ee8cc1Swenshuai.xi bytes written on PIPEDES[1] can be read from PIPEDES[0]. 383*53ee8cc1Swenshuai.xi Returns 0 if successful, -1 if not. */ 384*53ee8cc1Swenshuai.xi extern int pipe (int __pipedes[2]) __THROW __wur; 385*53ee8cc1Swenshuai.xi 386*53ee8cc1Swenshuai.xi /* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM. 387*53ee8cc1Swenshuai.xi If SECONDS is zero, any currently scheduled alarm will be cancelled. 388*53ee8cc1Swenshuai.xi The function returns the number of seconds remaining until the last 389*53ee8cc1Swenshuai.xi alarm scheduled would have signaled, or zero if there wasn't one. 390*53ee8cc1Swenshuai.xi There is no return value to indicate an error, but you can set `errno' 391*53ee8cc1Swenshuai.xi to 0 and check its value after calling `alarm', and this might tell you. 392*53ee8cc1Swenshuai.xi The signal may come late due to processor scheduling. */ 393*53ee8cc1Swenshuai.xi extern unsigned int alarm (unsigned int __seconds) __THROW; 394*53ee8cc1Swenshuai.xi 395*53ee8cc1Swenshuai.xi /* Make the process sleep for SECONDS seconds, or until a signal arrives 396*53ee8cc1Swenshuai.xi and is not ignored. The function returns the number of seconds less 397*53ee8cc1Swenshuai.xi than SECONDS which it actually slept (thus zero if it slept the full time). 398*53ee8cc1Swenshuai.xi If a signal handler does a `longjmp' or modifies the handling of the 399*53ee8cc1Swenshuai.xi SIGALRM signal while inside `sleep' call, the handling of the SIGALRM 400*53ee8cc1Swenshuai.xi signal afterwards is undefined. There is no return value to indicate 401*53ee8cc1Swenshuai.xi error, but if `sleep' returns SECONDS, it probably didn't work. 402*53ee8cc1Swenshuai.xi 403*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 404*53ee8cc1Swenshuai.xi __THROW. */ 405*53ee8cc1Swenshuai.xi extern unsigned int sleep (unsigned int __seconds); 406*53ee8cc1Swenshuai.xi 407*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 408*53ee8cc1Swenshuai.xi /* Set an alarm to go off (generating a SIGALRM signal) in VALUE 409*53ee8cc1Swenshuai.xi microseconds. If INTERVAL is nonzero, when the alarm goes off, the 410*53ee8cc1Swenshuai.xi timer is reset to go off every INTERVAL microseconds thereafter. 411*53ee8cc1Swenshuai.xi Returns the number of microseconds remaining before the alarm. */ 412*53ee8cc1Swenshuai.xi extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) 413*53ee8cc1Swenshuai.xi __THROW; 414*53ee8cc1Swenshuai.xi 415*53ee8cc1Swenshuai.xi /* Sleep USECONDS microseconds, or until a signal arrives that is not blocked 416*53ee8cc1Swenshuai.xi or ignored. 417*53ee8cc1Swenshuai.xi 418*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 419*53ee8cc1Swenshuai.xi __THROW. */ 420*53ee8cc1Swenshuai.xi extern int usleep (__useconds_t __useconds); 421*53ee8cc1Swenshuai.xi #endif 422*53ee8cc1Swenshuai.xi 423*53ee8cc1Swenshuai.xi 424*53ee8cc1Swenshuai.xi /* Suspend the process until a signal arrives. 425*53ee8cc1Swenshuai.xi This always returns -1 and sets `errno' to EINTR. 426*53ee8cc1Swenshuai.xi 427*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 428*53ee8cc1Swenshuai.xi __THROW. */ 429*53ee8cc1Swenshuai.xi extern int pause (void); 430*53ee8cc1Swenshuai.xi 431*53ee8cc1Swenshuai.xi 432*53ee8cc1Swenshuai.xi /* Change the owner and group of FILE. */ 433*53ee8cc1Swenshuai.xi extern int chown (__const char *__file, __uid_t __owner, __gid_t __group) 434*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 435*53ee8cc1Swenshuai.xi 436*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 437*53ee8cc1Swenshuai.xi /* Change the owner and group of the file that FD is open on. */ 438*53ee8cc1Swenshuai.xi extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW __wur; 439*53ee8cc1Swenshuai.xi 440*53ee8cc1Swenshuai.xi 441*53ee8cc1Swenshuai.xi /* Change owner and group of FILE, if it is a symbolic 442*53ee8cc1Swenshuai.xi link the ownership of the symbolic link is changed. */ 443*53ee8cc1Swenshuai.xi extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group) 444*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 445*53ee8cc1Swenshuai.xi 446*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open Unix. */ 447*53ee8cc1Swenshuai.xi 448*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE 449*53ee8cc1Swenshuai.xi /* Change the owner and group of FILE relative to the directory FD is open 450*53ee8cc1Swenshuai.xi on. */ 451*53ee8cc1Swenshuai.xi extern int fchownat (int __fd, __const char *__file, __uid_t __owner, 452*53ee8cc1Swenshuai.xi __gid_t __group, int __flag) 453*53ee8cc1Swenshuai.xi __THROW __nonnull ((2)) __wur; 454*53ee8cc1Swenshuai.xi #endif /* Use GNU. */ 455*53ee8cc1Swenshuai.xi 456*53ee8cc1Swenshuai.xi /* Change the process's working directory to PATH. */ 457*53ee8cc1Swenshuai.xi extern int chdir (__const char *__path) __THROW __nonnull ((1)) __wur; 458*53ee8cc1Swenshuai.xi 459*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 460*53ee8cc1Swenshuai.xi /* Change the process's working directory to the one FD is open on. */ 461*53ee8cc1Swenshuai.xi extern int fchdir (int __fd) __THROW __wur; 462*53ee8cc1Swenshuai.xi #endif 463*53ee8cc1Swenshuai.xi 464*53ee8cc1Swenshuai.xi /* Get the pathname of the current working directory, 465*53ee8cc1Swenshuai.xi and put it in SIZE bytes of BUF. Returns NULL if the 466*53ee8cc1Swenshuai.xi directory couldn't be determined or SIZE was too small. 467*53ee8cc1Swenshuai.xi If successful, returns BUF. In GNU, if BUF is NULL, 468*53ee8cc1Swenshuai.xi an array is allocated with `malloc'; the array is SIZE 469*53ee8cc1Swenshuai.xi bytes long, unless SIZE == 0, in which case it is as 470*53ee8cc1Swenshuai.xi big as necessary. */ 471*53ee8cc1Swenshuai.xi extern char *getcwd (char *__buf, size_t __size) __THROW __wur; 472*53ee8cc1Swenshuai.xi 473*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 474*53ee8cc1Swenshuai.xi /* Return a malloc'd string containing the current directory name. 475*53ee8cc1Swenshuai.xi If the environment variable `PWD' is set, and its value is correct, 476*53ee8cc1Swenshuai.xi that value is used. */ 477*53ee8cc1Swenshuai.xi extern char *get_current_dir_name (void) __THROW; 478*53ee8cc1Swenshuai.xi #endif 479*53ee8cc1Swenshuai.xi 480*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 481*53ee8cc1Swenshuai.xi /* Put the absolute pathname of the current working directory in BUF. 482*53ee8cc1Swenshuai.xi If successful, return BUF. If not, put an error message in 483*53ee8cc1Swenshuai.xi BUF and return NULL. BUF should be at least PATH_MAX bytes long. */ 484*53ee8cc1Swenshuai.xi extern char *getwd (char *__buf) 485*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __attribute_deprecated__ __wur; 486*53ee8cc1Swenshuai.xi #endif 487*53ee8cc1Swenshuai.xi 488*53ee8cc1Swenshuai.xi 489*53ee8cc1Swenshuai.xi /* Duplicate FD, returning a new file descriptor on the same file. */ 490*53ee8cc1Swenshuai.xi extern int dup (int __fd) __THROW __wur; 491*53ee8cc1Swenshuai.xi 492*53ee8cc1Swenshuai.xi /* Duplicate FD to FD2, closing FD2 and making it open on the same file. */ 493*53ee8cc1Swenshuai.xi extern int dup2 (int __fd, int __fd2) __THROW; 494*53ee8cc1Swenshuai.xi 495*53ee8cc1Swenshuai.xi /* NULL-terminated array of "NAME=VALUE" environment variables. */ 496*53ee8cc1Swenshuai.xi extern char **__environ; 497*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 498*53ee8cc1Swenshuai.xi extern char **environ; 499*53ee8cc1Swenshuai.xi #endif 500*53ee8cc1Swenshuai.xi 501*53ee8cc1Swenshuai.xi 502*53ee8cc1Swenshuai.xi /* Replace the current process, executing PATH with arguments ARGV and 503*53ee8cc1Swenshuai.xi environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ 504*53ee8cc1Swenshuai.xi extern int execve (__const char *__path, char *__const __argv[], 505*53ee8cc1Swenshuai.xi char *__const __envp[]) __THROW __nonnull ((1)); 506*53ee8cc1Swenshuai.xi 507*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 508*53ee8cc1Swenshuai.xi /* Execute the file FD refers to, overlaying the running program image. 509*53ee8cc1Swenshuai.xi ARGV and ENVP are passed to the new program, as for `execve'. */ 510*53ee8cc1Swenshuai.xi extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[]) 511*53ee8cc1Swenshuai.xi __THROW; 512*53ee8cc1Swenshuai.xi #endif 513*53ee8cc1Swenshuai.xi 514*53ee8cc1Swenshuai.xi 515*53ee8cc1Swenshuai.xi /* Execute PATH with arguments ARGV and environment from `environ'. */ 516*53ee8cc1Swenshuai.xi extern int execv (__const char *__path, char *__const __argv[]) 517*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 518*53ee8cc1Swenshuai.xi 519*53ee8cc1Swenshuai.xi /* Execute PATH with all arguments after PATH until a NULL pointer, 520*53ee8cc1Swenshuai.xi and the argument after that for environment. */ 521*53ee8cc1Swenshuai.xi extern int execle (__const char *__path, __const char *__arg, ...) 522*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 523*53ee8cc1Swenshuai.xi 524*53ee8cc1Swenshuai.xi /* Execute PATH with all arguments after PATH until 525*53ee8cc1Swenshuai.xi a NULL pointer and environment from `environ'. */ 526*53ee8cc1Swenshuai.xi extern int execl (__const char *__path, __const char *__arg, ...) 527*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 528*53ee8cc1Swenshuai.xi 529*53ee8cc1Swenshuai.xi /* Execute FILE, searching in the `PATH' environment variable if it contains 530*53ee8cc1Swenshuai.xi no slashes, with arguments ARGV and environment from `environ'. */ 531*53ee8cc1Swenshuai.xi extern int execvp (__const char *__file, char *__const __argv[]) 532*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 533*53ee8cc1Swenshuai.xi 534*53ee8cc1Swenshuai.xi /* Execute FILE, searching in the `PATH' environment variable if 535*53ee8cc1Swenshuai.xi it contains no slashes, with all arguments after FILE until a 536*53ee8cc1Swenshuai.xi NULL pointer and environment from `environ'. */ 537*53ee8cc1Swenshuai.xi extern int execlp (__const char *__file, __const char *__arg, ...) 538*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 539*53ee8cc1Swenshuai.xi 540*53ee8cc1Swenshuai.xi 541*53ee8cc1Swenshuai.xi #if defined __USE_MISC || defined __USE_XOPEN 542*53ee8cc1Swenshuai.xi /* Add INC to priority of the current process. */ 543*53ee8cc1Swenshuai.xi extern int nice (int __inc) __THROW __wur; 544*53ee8cc1Swenshuai.xi #endif 545*53ee8cc1Swenshuai.xi 546*53ee8cc1Swenshuai.xi 547*53ee8cc1Swenshuai.xi /* Terminate program execution with the low-order 8 bits of STATUS. */ 548*53ee8cc1Swenshuai.xi extern void _exit (int __status) __attribute__ ((__noreturn__)); 549*53ee8cc1Swenshuai.xi 550*53ee8cc1Swenshuai.xi 551*53ee8cc1Swenshuai.xi /* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf'; 552*53ee8cc1Swenshuai.xi the `_SC_*' symbols for the NAME argument to `sysconf'; 553*53ee8cc1Swenshuai.xi and the `_CS_*' symbols for the NAME argument to `confstr'. */ 554*53ee8cc1Swenshuai.xi #include <bits/confname.h> 555*53ee8cc1Swenshuai.xi 556*53ee8cc1Swenshuai.xi /* Get file-specific configuration information about PATH. */ 557*53ee8cc1Swenshuai.xi extern long int pathconf (__const char *__path, int __name) 558*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 559*53ee8cc1Swenshuai.xi 560*53ee8cc1Swenshuai.xi /* Get file-specific configuration about descriptor FD. */ 561*53ee8cc1Swenshuai.xi extern long int fpathconf (int __fd, int __name) __THROW; 562*53ee8cc1Swenshuai.xi 563*53ee8cc1Swenshuai.xi /* Get the value of the system variable NAME. */ 564*53ee8cc1Swenshuai.xi extern long int sysconf (int __name) __THROW; 565*53ee8cc1Swenshuai.xi 566*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX2 567*53ee8cc1Swenshuai.xi /* Get the value of the string-valued system variable NAME. */ 568*53ee8cc1Swenshuai.xi extern size_t confstr (int __name, char *__buf, size_t __len) __THROW; 569*53ee8cc1Swenshuai.xi #endif 570*53ee8cc1Swenshuai.xi 571*53ee8cc1Swenshuai.xi 572*53ee8cc1Swenshuai.xi /* Get the process ID of the calling process. */ 573*53ee8cc1Swenshuai.xi extern __pid_t getpid (void) __THROW; 574*53ee8cc1Swenshuai.xi 575*53ee8cc1Swenshuai.xi /* Get the process ID of the calling process's parent. */ 576*53ee8cc1Swenshuai.xi extern __pid_t getppid (void) __THROW; 577*53ee8cc1Swenshuai.xi 578*53ee8cc1Swenshuai.xi /* Get the process group ID of the calling process. 579*53ee8cc1Swenshuai.xi This function is different on old BSD. */ 580*53ee8cc1Swenshuai.xi #ifndef __FAVOR_BSD 581*53ee8cc1Swenshuai.xi extern __pid_t getpgrp (void) __THROW; 582*53ee8cc1Swenshuai.xi #else 583*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 584*53ee8cc1Swenshuai.xi extern __pid_t __REDIRECT_NTH (getpgrp, (__pid_t __pid), __getpgid); 585*53ee8cc1Swenshuai.xi # else 586*53ee8cc1Swenshuai.xi # define getpgrp __getpgid 587*53ee8cc1Swenshuai.xi # endif 588*53ee8cc1Swenshuai.xi #endif 589*53ee8cc1Swenshuai.xi 590*53ee8cc1Swenshuai.xi /* Get the process group ID of process PID. */ 591*53ee8cc1Swenshuai.xi extern __pid_t __getpgid (__pid_t __pid) __THROW; 592*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 593*53ee8cc1Swenshuai.xi extern __pid_t getpgid (__pid_t __pid) __THROW; 594*53ee8cc1Swenshuai.xi #endif 595*53ee8cc1Swenshuai.xi 596*53ee8cc1Swenshuai.xi 597*53ee8cc1Swenshuai.xi /* Set the process group ID of the process matching PID to PGID. 598*53ee8cc1Swenshuai.xi If PID is zero, the current process's process group ID is set. 599*53ee8cc1Swenshuai.xi If PGID is zero, the process ID of the process is used. */ 600*53ee8cc1Swenshuai.xi extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW; 601*53ee8cc1Swenshuai.xi 602*53ee8cc1Swenshuai.xi #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED 603*53ee8cc1Swenshuai.xi /* Both System V and BSD have `setpgrp' functions, but with different 604*53ee8cc1Swenshuai.xi calling conventions. The BSD function is the same as POSIX.1 `setpgid' 605*53ee8cc1Swenshuai.xi (above). The System V function takes no arguments and puts the calling 606*53ee8cc1Swenshuai.xi process in its on group like `setpgid (0, 0)'. 607*53ee8cc1Swenshuai.xi 608*53ee8cc1Swenshuai.xi New programs should always use `setpgid' instead. 609*53ee8cc1Swenshuai.xi 610*53ee8cc1Swenshuai.xi The default in GNU is to provide the System V function. The BSD 611*53ee8cc1Swenshuai.xi function is available under -D_BSD_SOURCE. */ 612*53ee8cc1Swenshuai.xi 613*53ee8cc1Swenshuai.xi # ifndef __FAVOR_BSD 614*53ee8cc1Swenshuai.xi 615*53ee8cc1Swenshuai.xi /* Set the process group ID of the calling process to its own PID. 616*53ee8cc1Swenshuai.xi This is exactly the same as `setpgid (0, 0)'. */ 617*53ee8cc1Swenshuai.xi extern int setpgrp (void) __THROW; 618*53ee8cc1Swenshuai.xi 619*53ee8cc1Swenshuai.xi # else 620*53ee8cc1Swenshuai.xi 621*53ee8cc1Swenshuai.xi /* Another name for `setpgid' (above). */ 622*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 623*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (setpgrp, (__pid_t __pid, __pid_t __pgrp), setpgid); 624*53ee8cc1Swenshuai.xi # else 625*53ee8cc1Swenshuai.xi # define setpgrp setpgid 626*53ee8cc1Swenshuai.xi # endif 627*53ee8cc1Swenshuai.xi 628*53ee8cc1Swenshuai.xi # endif /* Favor BSD. */ 629*53ee8cc1Swenshuai.xi #endif /* Use SVID or BSD. */ 630*53ee8cc1Swenshuai.xi 631*53ee8cc1Swenshuai.xi /* Create a new session with the calling process as its leader. 632*53ee8cc1Swenshuai.xi The process group IDs of the session and the calling process 633*53ee8cc1Swenshuai.xi are set to the process ID of the calling process, which is returned. */ 634*53ee8cc1Swenshuai.xi extern __pid_t setsid (void) __THROW; 635*53ee8cc1Swenshuai.xi 636*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN_EXTENDED 637*53ee8cc1Swenshuai.xi /* Return the session ID of the given process. */ 638*53ee8cc1Swenshuai.xi extern __pid_t getsid (__pid_t __pid) __THROW; 639*53ee8cc1Swenshuai.xi #endif 640*53ee8cc1Swenshuai.xi 641*53ee8cc1Swenshuai.xi /* Get the real user ID of the calling process. */ 642*53ee8cc1Swenshuai.xi extern __uid_t getuid (void) __THROW; 643*53ee8cc1Swenshuai.xi 644*53ee8cc1Swenshuai.xi /* Get the effective user ID of the calling process. */ 645*53ee8cc1Swenshuai.xi extern __uid_t geteuid (void) __THROW; 646*53ee8cc1Swenshuai.xi 647*53ee8cc1Swenshuai.xi /* Get the real group ID of the calling process. */ 648*53ee8cc1Swenshuai.xi extern __gid_t getgid (void) __THROW; 649*53ee8cc1Swenshuai.xi 650*53ee8cc1Swenshuai.xi /* Get the effective group ID of the calling process. */ 651*53ee8cc1Swenshuai.xi extern __gid_t getegid (void) __THROW; 652*53ee8cc1Swenshuai.xi 653*53ee8cc1Swenshuai.xi /* If SIZE is zero, return the number of supplementary groups 654*53ee8cc1Swenshuai.xi the calling process is in. Otherwise, fill in the group IDs 655*53ee8cc1Swenshuai.xi of its supplementary groups in LIST and return the number written. */ 656*53ee8cc1Swenshuai.xi extern int getgroups (int __size, __gid_t __list[]) __THROW __wur; 657*53ee8cc1Swenshuai.xi 658*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 659*53ee8cc1Swenshuai.xi /* Return nonzero iff the calling process is in group GID. */ 660*53ee8cc1Swenshuai.xi extern int group_member (__gid_t __gid) __THROW; 661*53ee8cc1Swenshuai.xi #endif 662*53ee8cc1Swenshuai.xi 663*53ee8cc1Swenshuai.xi /* Set the user ID of the calling process to UID. 664*53ee8cc1Swenshuai.xi If the calling process is the super-user, set the real 665*53ee8cc1Swenshuai.xi and effective user IDs, and the saved set-user-ID to UID; 666*53ee8cc1Swenshuai.xi if not, the effective user ID is set to UID. */ 667*53ee8cc1Swenshuai.xi extern int setuid (__uid_t __uid) __THROW; 668*53ee8cc1Swenshuai.xi 669*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 670*53ee8cc1Swenshuai.xi /* Set the real user ID of the calling process to RUID, 671*53ee8cc1Swenshuai.xi and the effective user ID of the calling process to EUID. */ 672*53ee8cc1Swenshuai.xi extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW; 673*53ee8cc1Swenshuai.xi #endif 674*53ee8cc1Swenshuai.xi 675*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN2K 676*53ee8cc1Swenshuai.xi /* Set the effective user ID of the calling process to UID. */ 677*53ee8cc1Swenshuai.xi extern int seteuid (__uid_t __uid) __THROW; 678*53ee8cc1Swenshuai.xi #endif /* Use BSD. */ 679*53ee8cc1Swenshuai.xi 680*53ee8cc1Swenshuai.xi /* Set the group ID of the calling process to GID. 681*53ee8cc1Swenshuai.xi If the calling process is the super-user, set the real 682*53ee8cc1Swenshuai.xi and effective group IDs, and the saved set-group-ID to GID; 683*53ee8cc1Swenshuai.xi if not, the effective group ID is set to GID. */ 684*53ee8cc1Swenshuai.xi extern int setgid (__gid_t __gid) __THROW; 685*53ee8cc1Swenshuai.xi 686*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 687*53ee8cc1Swenshuai.xi /* Set the real group ID of the calling process to RGID, 688*53ee8cc1Swenshuai.xi and the effective group ID of the calling process to EGID. */ 689*53ee8cc1Swenshuai.xi extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW; 690*53ee8cc1Swenshuai.xi #endif 691*53ee8cc1Swenshuai.xi 692*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN2K 693*53ee8cc1Swenshuai.xi /* Set the effective group ID of the calling process to GID. */ 694*53ee8cc1Swenshuai.xi extern int setegid (__gid_t __gid) __THROW; 695*53ee8cc1Swenshuai.xi #endif /* Use BSD. */ 696*53ee8cc1Swenshuai.xi 697*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 698*53ee8cc1Swenshuai.xi /* Fetch the real user ID, effective user ID, and saved-set user ID, 699*53ee8cc1Swenshuai.xi of the calling process. */ 700*53ee8cc1Swenshuai.xi extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) 701*53ee8cc1Swenshuai.xi __THROW; 702*53ee8cc1Swenshuai.xi 703*53ee8cc1Swenshuai.xi /* Fetch the real group ID, effective group ID, and saved-set group ID, 704*53ee8cc1Swenshuai.xi of the calling process. */ 705*53ee8cc1Swenshuai.xi extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) 706*53ee8cc1Swenshuai.xi __THROW; 707*53ee8cc1Swenshuai.xi 708*53ee8cc1Swenshuai.xi /* Set the real user ID, effective user ID, and saved-set user ID, 709*53ee8cc1Swenshuai.xi of the calling process to RUID, EUID, and SUID, respectively. */ 710*53ee8cc1Swenshuai.xi extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) 711*53ee8cc1Swenshuai.xi __THROW; 712*53ee8cc1Swenshuai.xi 713*53ee8cc1Swenshuai.xi /* Set the real group ID, effective group ID, and saved-set group ID, 714*53ee8cc1Swenshuai.xi of the calling process to RGID, EGID, and SGID, respectively. */ 715*53ee8cc1Swenshuai.xi extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) 716*53ee8cc1Swenshuai.xi __THROW; 717*53ee8cc1Swenshuai.xi #endif 718*53ee8cc1Swenshuai.xi 719*53ee8cc1Swenshuai.xi 720*53ee8cc1Swenshuai.xi /* Clone the calling process, creating an exact copy. 721*53ee8cc1Swenshuai.xi Return -1 for errors, 0 to the new process, 722*53ee8cc1Swenshuai.xi and the process ID of the new process to the old process. */ 723*53ee8cc1Swenshuai.xi extern __pid_t fork (void) __THROW; 724*53ee8cc1Swenshuai.xi 725*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 726*53ee8cc1Swenshuai.xi /* Clone the calling process, but without copying the whole address space. 727*53ee8cc1Swenshuai.xi The calling process is suspended until the new process exits or is 728*53ee8cc1Swenshuai.xi replaced by a call to `execve'. Return -1 for errors, 0 to the new process, 729*53ee8cc1Swenshuai.xi and the process ID of the new process to the old process. */ 730*53ee8cc1Swenshuai.xi extern __pid_t vfork (void) __THROW; 731*53ee8cc1Swenshuai.xi #endif /* Use BSD. */ 732*53ee8cc1Swenshuai.xi 733*53ee8cc1Swenshuai.xi 734*53ee8cc1Swenshuai.xi /* Return the pathname of the terminal FD is open on, or NULL on errors. 735*53ee8cc1Swenshuai.xi The returned storage is good only until the next call to this function. */ 736*53ee8cc1Swenshuai.xi extern char *ttyname (int __fd) __THROW; 737*53ee8cc1Swenshuai.xi 738*53ee8cc1Swenshuai.xi /* Store at most BUFLEN characters of the pathname of the terminal FD is 739*53ee8cc1Swenshuai.xi open on in BUF. Return 0 on success, otherwise an error number. */ 740*53ee8cc1Swenshuai.xi extern int ttyname_r (int __fd, char *__buf, size_t __buflen) 741*53ee8cc1Swenshuai.xi __THROW __nonnull ((2)) __wur; 742*53ee8cc1Swenshuai.xi 743*53ee8cc1Swenshuai.xi /* Return 1 if FD is a valid descriptor associated 744*53ee8cc1Swenshuai.xi with a terminal, zero if not. */ 745*53ee8cc1Swenshuai.xi extern int isatty (int __fd) __THROW; 746*53ee8cc1Swenshuai.xi 747*53ee8cc1Swenshuai.xi #if defined __USE_BSD \ 748*53ee8cc1Swenshuai.xi || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98) 749*53ee8cc1Swenshuai.xi /* Return the index into the active-logins file (utmp) for 750*53ee8cc1Swenshuai.xi the controlling terminal. */ 751*53ee8cc1Swenshuai.xi extern int ttyslot (void) __THROW; 752*53ee8cc1Swenshuai.xi #endif 753*53ee8cc1Swenshuai.xi 754*53ee8cc1Swenshuai.xi 755*53ee8cc1Swenshuai.xi /* Make a link to FROM named TO. */ 756*53ee8cc1Swenshuai.xi extern int link (__const char *__from, __const char *__to) 757*53ee8cc1Swenshuai.xi __THROW __nonnull ((1, 2)) __wur; 758*53ee8cc1Swenshuai.xi 759*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE 760*53ee8cc1Swenshuai.xi /* Like link but relative paths in TO and FROM are interpreted relative 761*53ee8cc1Swenshuai.xi to FROMFD and TOFD respectively. */ 762*53ee8cc1Swenshuai.xi extern int linkat (int __fromfd, __const char *__from, int __tofd, 763*53ee8cc1Swenshuai.xi __const char *__to, int __flags) 764*53ee8cc1Swenshuai.xi __THROW __nonnull ((2, 4)) __wur; 765*53ee8cc1Swenshuai.xi #endif 766*53ee8cc1Swenshuai.xi 767*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K 768*53ee8cc1Swenshuai.xi /* Make a symbolic link to FROM named TO. */ 769*53ee8cc1Swenshuai.xi extern int symlink (__const char *__from, __const char *__to) 770*53ee8cc1Swenshuai.xi __THROW __nonnull ((1, 2)) __wur; 771*53ee8cc1Swenshuai.xi 772*53ee8cc1Swenshuai.xi /* Read the contents of the symbolic link PATH into no more than 773*53ee8cc1Swenshuai.xi LEN bytes of BUF. The contents are not null-terminated. 774*53ee8cc1Swenshuai.xi Returns the number of characters read, or -1 for errors. */ 775*53ee8cc1Swenshuai.xi extern ssize_t readlink (__const char *__restrict __path, 776*53ee8cc1Swenshuai.xi char *__restrict __buf, size_t __len) 777*53ee8cc1Swenshuai.xi __THROW __nonnull ((1, 2)) __wur; 778*53ee8cc1Swenshuai.xi #endif /* Use BSD. */ 779*53ee8cc1Swenshuai.xi 780*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE 781*53ee8cc1Swenshuai.xi /* Like symlink but a relative path in TO is interpreted relative to TOFD. */ 782*53ee8cc1Swenshuai.xi extern int symlinkat (__const char *__from, int __tofd, 783*53ee8cc1Swenshuai.xi __const char *__to) __THROW __nonnull ((1, 3)) __wur; 784*53ee8cc1Swenshuai.xi 785*53ee8cc1Swenshuai.xi /* Like readlink but a relative PATH is interpreted relative to FD. */ 786*53ee8cc1Swenshuai.xi extern ssize_t readlinkat (int __fd, __const char *__restrict __path, 787*53ee8cc1Swenshuai.xi char *__restrict __buf, size_t __len) 788*53ee8cc1Swenshuai.xi __THROW __nonnull ((2, 3)) __wur; 789*53ee8cc1Swenshuai.xi #endif 790*53ee8cc1Swenshuai.xi 791*53ee8cc1Swenshuai.xi /* Remove the link NAME. */ 792*53ee8cc1Swenshuai.xi extern int unlink (__const char *__name) __THROW __nonnull ((1)); 793*53ee8cc1Swenshuai.xi 794*53ee8cc1Swenshuai.xi #ifdef __USE_ATFILE 795*53ee8cc1Swenshuai.xi /* Remove the link NAME relative to FD. */ 796*53ee8cc1Swenshuai.xi extern int unlinkat (int __fd, __const char *__name, int __flag) 797*53ee8cc1Swenshuai.xi __THROW __nonnull ((2)); 798*53ee8cc1Swenshuai.xi #endif 799*53ee8cc1Swenshuai.xi 800*53ee8cc1Swenshuai.xi /* Remove the directory PATH. */ 801*53ee8cc1Swenshuai.xi extern int rmdir (__const char *__path) __THROW __nonnull ((1)); 802*53ee8cc1Swenshuai.xi 803*53ee8cc1Swenshuai.xi 804*53ee8cc1Swenshuai.xi /* Return the foreground process group ID of FD. */ 805*53ee8cc1Swenshuai.xi extern __pid_t tcgetpgrp (int __fd) __THROW; 806*53ee8cc1Swenshuai.xi 807*53ee8cc1Swenshuai.xi /* Set the foreground process group ID of FD set PGRP_ID. */ 808*53ee8cc1Swenshuai.xi extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW; 809*53ee8cc1Swenshuai.xi 810*53ee8cc1Swenshuai.xi 811*53ee8cc1Swenshuai.xi /* Return the login name of the user. 812*53ee8cc1Swenshuai.xi 813*53ee8cc1Swenshuai.xi This function is a possible cancellation points and therefore not 814*53ee8cc1Swenshuai.xi marked with __THROW. */ 815*53ee8cc1Swenshuai.xi extern char *getlogin (void); 816*53ee8cc1Swenshuai.xi #if defined __USE_REENTRANT || defined __USE_POSIX199506 817*53ee8cc1Swenshuai.xi /* Return at most NAME_LEN characters of the login name of the user in NAME. 818*53ee8cc1Swenshuai.xi If it cannot be determined or some other error occurred, return the error 819*53ee8cc1Swenshuai.xi code. Otherwise return 0. 820*53ee8cc1Swenshuai.xi 821*53ee8cc1Swenshuai.xi This function is a possible cancellation points and therefore not 822*53ee8cc1Swenshuai.xi marked with __THROW. */ 823*53ee8cc1Swenshuai.xi extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1)); 824*53ee8cc1Swenshuai.xi #endif 825*53ee8cc1Swenshuai.xi 826*53ee8cc1Swenshuai.xi #ifdef __USE_BSD 827*53ee8cc1Swenshuai.xi /* Set the login name returned by `getlogin'. */ 828*53ee8cc1Swenshuai.xi extern int setlogin (__const char *__name) __THROW __nonnull ((1)); 829*53ee8cc1Swenshuai.xi #endif 830*53ee8cc1Swenshuai.xi 831*53ee8cc1Swenshuai.xi 832*53ee8cc1Swenshuai.xi #ifdef __USE_POSIX2 833*53ee8cc1Swenshuai.xi /* Get definitions and prototypes for functions to process the 834*53ee8cc1Swenshuai.xi arguments in ARGV (ARGC of them, minus the program name) for 835*53ee8cc1Swenshuai.xi options given in OPTS. */ 836*53ee8cc1Swenshuai.xi # define __need_getopt 837*53ee8cc1Swenshuai.xi # include <getopt.h> 838*53ee8cc1Swenshuai.xi #endif 839*53ee8cc1Swenshuai.xi 840*53ee8cc1Swenshuai.xi 841*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_UNIX98 842*53ee8cc1Swenshuai.xi /* Put the name of the current host in no more than LEN bytes of NAME. 843*53ee8cc1Swenshuai.xi The result is null-terminated if LEN is large enough for the full 844*53ee8cc1Swenshuai.xi name and the terminator. */ 845*53ee8cc1Swenshuai.xi extern int gethostname (char *__name, size_t __len) __THROW __nonnull ((1)); 846*53ee8cc1Swenshuai.xi #endif 847*53ee8cc1Swenshuai.xi 848*53ee8cc1Swenshuai.xi 849*53ee8cc1Swenshuai.xi #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98) 850*53ee8cc1Swenshuai.xi /* Set the name of the current host to NAME, which is LEN bytes long. 851*53ee8cc1Swenshuai.xi This call is restricted to the super-user. */ 852*53ee8cc1Swenshuai.xi extern int sethostname (__const char *__name, size_t __len) 853*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 854*53ee8cc1Swenshuai.xi 855*53ee8cc1Swenshuai.xi /* Set the current machine's Internet number to ID. 856*53ee8cc1Swenshuai.xi This call is restricted to the super-user. */ 857*53ee8cc1Swenshuai.xi extern int sethostid (long int __id) __THROW __wur; 858*53ee8cc1Swenshuai.xi 859*53ee8cc1Swenshuai.xi 860*53ee8cc1Swenshuai.xi /* Get and set the NIS (aka YP) domain name, if any. 861*53ee8cc1Swenshuai.xi Called just like `gethostname' and `sethostname'. 862*53ee8cc1Swenshuai.xi The NIS domain name is usually the empty string when not using NIS. */ 863*53ee8cc1Swenshuai.xi extern int getdomainname (char *__name, size_t __len) 864*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 865*53ee8cc1Swenshuai.xi extern int setdomainname (__const char *__name, size_t __len) 866*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 867*53ee8cc1Swenshuai.xi 868*53ee8cc1Swenshuai.xi 869*53ee8cc1Swenshuai.xi /* Revoke access permissions to all processes currently communicating 870*53ee8cc1Swenshuai.xi with the control terminal, and then send a SIGHUP signal to the process 871*53ee8cc1Swenshuai.xi group of the control terminal. */ 872*53ee8cc1Swenshuai.xi extern int vhangup (void) __THROW; 873*53ee8cc1Swenshuai.xi 874*53ee8cc1Swenshuai.xi /* Revoke the access of all descriptors currently open on FILE. */ 875*53ee8cc1Swenshuai.xi extern int revoke (__const char *__file) __THROW __nonnull ((1)) __wur; 876*53ee8cc1Swenshuai.xi 877*53ee8cc1Swenshuai.xi 878*53ee8cc1Swenshuai.xi /* Enable statistical profiling, writing samples of the PC into at most 879*53ee8cc1Swenshuai.xi SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling 880*53ee8cc1Swenshuai.xi is enabled, the system examines the user PC and increments 881*53ee8cc1Swenshuai.xi SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536]. If SCALE is zero, 882*53ee8cc1Swenshuai.xi disable profiling. Returns zero on success, -1 on error. */ 883*53ee8cc1Swenshuai.xi extern int profil (unsigned short int *__sample_buffer, size_t __size, 884*53ee8cc1Swenshuai.xi size_t __offset, unsigned int __scale) 885*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)); 886*53ee8cc1Swenshuai.xi 887*53ee8cc1Swenshuai.xi 888*53ee8cc1Swenshuai.xi /* Turn accounting on if NAME is an existing file. The system will then write 889*53ee8cc1Swenshuai.xi a record for each process as it terminates, to this file. If NAME is NULL, 890*53ee8cc1Swenshuai.xi turn accounting off. This call is restricted to the super-user. */ 891*53ee8cc1Swenshuai.xi extern int acct (__const char *__name) __THROW; 892*53ee8cc1Swenshuai.xi 893*53ee8cc1Swenshuai.xi 894*53ee8cc1Swenshuai.xi /* Successive calls return the shells listed in `/etc/shells'. */ 895*53ee8cc1Swenshuai.xi extern char *getusershell (void) __THROW; 896*53ee8cc1Swenshuai.xi extern void endusershell (void) __THROW; /* Discard cached info. */ 897*53ee8cc1Swenshuai.xi extern void setusershell (void) __THROW; /* Rewind and re-read the file. */ 898*53ee8cc1Swenshuai.xi 899*53ee8cc1Swenshuai.xi 900*53ee8cc1Swenshuai.xi /* Put the program in the background, and dissociate from the controlling 901*53ee8cc1Swenshuai.xi terminal. If NOCHDIR is zero, do `chdir ("/")'. If NOCLOSE is zero, 902*53ee8cc1Swenshuai.xi redirects stdin, stdout, and stderr to /dev/null. */ 903*53ee8cc1Swenshuai.xi extern int daemon (int __nochdir, int __noclose) __THROW __wur; 904*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open. */ 905*53ee8cc1Swenshuai.xi 906*53ee8cc1Swenshuai.xi 907*53ee8cc1Swenshuai.xi #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K) 908*53ee8cc1Swenshuai.xi /* Make PATH be the root directory (the starting point for absolute paths). 909*53ee8cc1Swenshuai.xi This call is restricted to the super-user. */ 910*53ee8cc1Swenshuai.xi extern int chroot (__const char *__path) __THROW __nonnull ((1)) __wur; 911*53ee8cc1Swenshuai.xi 912*53ee8cc1Swenshuai.xi /* Prompt with PROMPT and read a string from the terminal without echoing. 913*53ee8cc1Swenshuai.xi Uses /dev/tty if possible; otherwise stderr and stdin. */ 914*53ee8cc1Swenshuai.xi extern char *getpass (__const char *__prompt) __nonnull ((1)); 915*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open. */ 916*53ee8cc1Swenshuai.xi 917*53ee8cc1Swenshuai.xi 918*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN || defined __USE_XOPEN2K 919*53ee8cc1Swenshuai.xi /* Make all changes done to FD actually appear on disk. 920*53ee8cc1Swenshuai.xi 921*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 922*53ee8cc1Swenshuai.xi __THROW. */ 923*53ee8cc1Swenshuai.xi extern int fsync (int __fd); 924*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open || Unix98. */ 925*53ee8cc1Swenshuai.xi 926*53ee8cc1Swenshuai.xi 927*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 928*53ee8cc1Swenshuai.xi 929*53ee8cc1Swenshuai.xi /* Return identifier for the current host. */ 930*53ee8cc1Swenshuai.xi extern long int gethostid (void); 931*53ee8cc1Swenshuai.xi 932*53ee8cc1Swenshuai.xi /* Make all changes done to all files actually appear on disk. */ 933*53ee8cc1Swenshuai.xi extern void sync (void) __THROW; 934*53ee8cc1Swenshuai.xi 935*53ee8cc1Swenshuai.xi 936*53ee8cc1Swenshuai.xi /* Return the number of bytes in a page. This is the system's page size, 937*53ee8cc1Swenshuai.xi which is not necessarily the same as the hardware page size. */ 938*53ee8cc1Swenshuai.xi extern int getpagesize (void) __THROW __attribute__ ((__const__)); 939*53ee8cc1Swenshuai.xi 940*53ee8cc1Swenshuai.xi 941*53ee8cc1Swenshuai.xi /* Return the maximum number of file descriptors 942*53ee8cc1Swenshuai.xi the current process could possibly have. */ 943*53ee8cc1Swenshuai.xi extern int getdtablesize (void) __THROW; 944*53ee8cc1Swenshuai.xi 945*53ee8cc1Swenshuai.xi 946*53ee8cc1Swenshuai.xi /* Truncate FILE to LENGTH bytes. */ 947*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 948*53ee8cc1Swenshuai.xi extern int truncate (__const char *__file, __off_t __length) 949*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 950*53ee8cc1Swenshuai.xi # else 951*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 952*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (truncate, 953*53ee8cc1Swenshuai.xi (__const char *__file, __off64_t __length), 954*53ee8cc1Swenshuai.xi truncate64) __nonnull ((1)) __wur; 955*53ee8cc1Swenshuai.xi # else 956*53ee8cc1Swenshuai.xi # define truncate truncate64 957*53ee8cc1Swenshuai.xi # endif 958*53ee8cc1Swenshuai.xi # endif 959*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 960*53ee8cc1Swenshuai.xi extern int truncate64 (__const char *__file, __off64_t __length) 961*53ee8cc1Swenshuai.xi __THROW __nonnull ((1)) __wur; 962*53ee8cc1Swenshuai.xi # endif 963*53ee8cc1Swenshuai.xi 964*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open Unix. */ 965*53ee8cc1Swenshuai.xi 966*53ee8cc1Swenshuai.xi #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K 967*53ee8cc1Swenshuai.xi 968*53ee8cc1Swenshuai.xi /* Truncate the file FD is open on to LENGTH bytes. */ 969*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 970*53ee8cc1Swenshuai.xi extern int ftruncate (int __fd, __off_t __length) __THROW __wur; 971*53ee8cc1Swenshuai.xi # else 972*53ee8cc1Swenshuai.xi # ifdef __REDIRECT_NTH 973*53ee8cc1Swenshuai.xi extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length), 974*53ee8cc1Swenshuai.xi ftruncate64) __wur; 975*53ee8cc1Swenshuai.xi # else 976*53ee8cc1Swenshuai.xi # define ftruncate ftruncate64 977*53ee8cc1Swenshuai.xi # endif 978*53ee8cc1Swenshuai.xi # endif 979*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 980*53ee8cc1Swenshuai.xi extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur; 981*53ee8cc1Swenshuai.xi # endif 982*53ee8cc1Swenshuai.xi 983*53ee8cc1Swenshuai.xi #endif /* Use BSD || X/Open Unix || POSIX 2003. */ 984*53ee8cc1Swenshuai.xi 985*53ee8cc1Swenshuai.xi 986*53ee8cc1Swenshuai.xi #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED 987*53ee8cc1Swenshuai.xi 988*53ee8cc1Swenshuai.xi /* Set the end of accessible data space (aka "the break") to ADDR. 989*53ee8cc1Swenshuai.xi Returns zero on success and -1 for errors (with errno set). */ 990*53ee8cc1Swenshuai.xi extern int brk (void *__addr) __THROW __wur; 991*53ee8cc1Swenshuai.xi 992*53ee8cc1Swenshuai.xi /* Increase or decrease the end of accessible data space by DELTA bytes. 993*53ee8cc1Swenshuai.xi If successful, returns the address the previous end of data space 994*53ee8cc1Swenshuai.xi (i.e. the beginning of the new space, if DELTA > 0); 995*53ee8cc1Swenshuai.xi returns (void *) -1 for errors (with errno set). */ 996*53ee8cc1Swenshuai.xi extern void *sbrk (intptr_t __delta) __THROW; 997*53ee8cc1Swenshuai.xi #endif 998*53ee8cc1Swenshuai.xi 999*53ee8cc1Swenshuai.xi 1000*53ee8cc1Swenshuai.xi #ifdef __USE_MISC 1001*53ee8cc1Swenshuai.xi /* Invoke `system call' number SYSNO, passing it the remaining arguments. 1002*53ee8cc1Swenshuai.xi This is completely system-dependent, and not often useful. 1003*53ee8cc1Swenshuai.xi 1004*53ee8cc1Swenshuai.xi In Unix, `syscall' sets `errno' for all errors and most calls return -1 1005*53ee8cc1Swenshuai.xi for errors; in many systems you cannot pass arguments or get return 1006*53ee8cc1Swenshuai.xi values for all system calls (`pipe', `fork', and `getppid' typically 1007*53ee8cc1Swenshuai.xi among them). 1008*53ee8cc1Swenshuai.xi 1009*53ee8cc1Swenshuai.xi In Mach, all system calls take normal arguments and always return an 1010*53ee8cc1Swenshuai.xi error code (zero for success). */ 1011*53ee8cc1Swenshuai.xi extern long int syscall (long int __sysno, ...) __THROW; 1012*53ee8cc1Swenshuai.xi 1013*53ee8cc1Swenshuai.xi #endif /* Use misc. */ 1014*53ee8cc1Swenshuai.xi 1015*53ee8cc1Swenshuai.xi 1016*53ee8cc1Swenshuai.xi #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK 1017*53ee8cc1Swenshuai.xi /* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both 1018*53ee8cc1Swenshuai.xi files consistent. Some systems have them there and some here, and some 1019*53ee8cc1Swenshuai.xi software depends on the macros being defined without including both. */ 1020*53ee8cc1Swenshuai.xi 1021*53ee8cc1Swenshuai.xi /* `lockf' is a simpler interface to the locking facilities of `fcntl'. 1022*53ee8cc1Swenshuai.xi LEN is always relative to the current file position. 1023*53ee8cc1Swenshuai.xi The CMD argument is one of the following. 1024*53ee8cc1Swenshuai.xi 1025*53ee8cc1Swenshuai.xi This function is a cancellation point and therefore not marked with 1026*53ee8cc1Swenshuai.xi __THROW. */ 1027*53ee8cc1Swenshuai.xi 1028*53ee8cc1Swenshuai.xi # define F_ULOCK 0 /* Unlock a previously locked region. */ 1029*53ee8cc1Swenshuai.xi # define F_LOCK 1 /* Lock a region for exclusive use. */ 1030*53ee8cc1Swenshuai.xi # define F_TLOCK 2 /* Test and lock a region for exclusive use. */ 1031*53ee8cc1Swenshuai.xi # define F_TEST 3 /* Test a region for other processes locks. */ 1032*53ee8cc1Swenshuai.xi 1033*53ee8cc1Swenshuai.xi # ifndef __USE_FILE_OFFSET64 1034*53ee8cc1Swenshuai.xi extern int lockf (int __fd, int __cmd, __off_t __len) __wur; 1035*53ee8cc1Swenshuai.xi # else 1036*53ee8cc1Swenshuai.xi # ifdef __REDIRECT 1037*53ee8cc1Swenshuai.xi extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), 1038*53ee8cc1Swenshuai.xi lockf64) __wur; 1039*53ee8cc1Swenshuai.xi # else 1040*53ee8cc1Swenshuai.xi # define lockf lockf64 1041*53ee8cc1Swenshuai.xi # endif 1042*53ee8cc1Swenshuai.xi # endif 1043*53ee8cc1Swenshuai.xi # ifdef __USE_LARGEFILE64 1044*53ee8cc1Swenshuai.xi extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur; 1045*53ee8cc1Swenshuai.xi # endif 1046*53ee8cc1Swenshuai.xi #endif /* Use misc and F_LOCK not already defined. */ 1047*53ee8cc1Swenshuai.xi 1048*53ee8cc1Swenshuai.xi 1049*53ee8cc1Swenshuai.xi #ifdef __USE_GNU 1050*53ee8cc1Swenshuai.xi 1051*53ee8cc1Swenshuai.xi /* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno' 1052*53ee8cc1Swenshuai.xi set to EINTR. */ 1053*53ee8cc1Swenshuai.xi 1054*53ee8cc1Swenshuai.xi # define TEMP_FAILURE_RETRY(expression) \ 1055*53ee8cc1Swenshuai.xi (__extension__ \ 1056*53ee8cc1Swenshuai.xi ({ long int __result; \ 1057*53ee8cc1Swenshuai.xi do __result = (long int) (expression); \ 1058*53ee8cc1Swenshuai.xi while (__result == -1L && errno == EINTR); \ 1059*53ee8cc1Swenshuai.xi __result; })) 1060*53ee8cc1Swenshuai.xi #endif 1061*53ee8cc1Swenshuai.xi 1062*53ee8cc1Swenshuai.xi #if defined __USE_POSIX199309 || defined __USE_UNIX98 1063*53ee8cc1Swenshuai.xi /* Synchronize at least the data part of a file with the underlying 1064*53ee8cc1Swenshuai.xi media. */ 1065*53ee8cc1Swenshuai.xi extern int fdatasync (int __fildes); 1066*53ee8cc1Swenshuai.xi #endif /* Use POSIX199309 */ 1067*53ee8cc1Swenshuai.xi 1068*53ee8cc1Swenshuai.xi 1069*53ee8cc1Swenshuai.xi /* XPG4.2 specifies that prototypes for the encryption functions must 1070*53ee8cc1Swenshuai.xi be defined here. */ 1071*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN 1072*53ee8cc1Swenshuai.xi /* Encrypt at most 8 characters from KEY using salt to perturb DES. */ 1073*53ee8cc1Swenshuai.xi extern char *crypt (__const char *__key, __const char *__salt) 1074*53ee8cc1Swenshuai.xi __THROW __nonnull ((1, 2)); 1075*53ee8cc1Swenshuai.xi 1076*53ee8cc1Swenshuai.xi /* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt 1077*53ee8cc1Swenshuai.xi block in place. */ 1078*53ee8cc1Swenshuai.xi extern void encrypt (char *__block, int __edflag) __THROW __nonnull ((1)); 1079*53ee8cc1Swenshuai.xi 1080*53ee8cc1Swenshuai.xi 1081*53ee8cc1Swenshuai.xi /* Swab pairs bytes in the first N bytes of the area pointed to by 1082*53ee8cc1Swenshuai.xi FROM and copy the result to TO. The value of TO must not be in the 1083*53ee8cc1Swenshuai.xi range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM 1084*53ee8cc1Swenshuai.xi is without partner. */ 1085*53ee8cc1Swenshuai.xi extern void swab (__const void *__restrict __from, void *__restrict __to, 1086*53ee8cc1Swenshuai.xi ssize_t __n) __THROW __nonnull ((1, 2)); 1087*53ee8cc1Swenshuai.xi #endif 1088*53ee8cc1Swenshuai.xi 1089*53ee8cc1Swenshuai.xi 1090*53ee8cc1Swenshuai.xi /* The Single Unix specification demands this prototype to be here. 1091*53ee8cc1Swenshuai.xi It is also found in <stdio.h>. */ 1092*53ee8cc1Swenshuai.xi #ifdef __USE_XOPEN 1093*53ee8cc1Swenshuai.xi /* Return the name of the controlling terminal. */ 1094*53ee8cc1Swenshuai.xi extern char *ctermid (char *__s) __THROW; 1095*53ee8cc1Swenshuai.xi #endif 1096*53ee8cc1Swenshuai.xi 1097*53ee8cc1Swenshuai.xi 1098*53ee8cc1Swenshuai.xi /* Define some macros helping to catch buffer overflows. */ 1099*53ee8cc1Swenshuai.xi #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline 1100*53ee8cc1Swenshuai.xi # include <bits/unistd.h> 1101*53ee8cc1Swenshuai.xi #endif 1102*53ee8cc1Swenshuai.xi 1103*53ee8cc1Swenshuai.xi __END_DECLS 1104*53ee8cc1Swenshuai.xi 1105*53ee8cc1Swenshuai.xi #endif /* unistd.h */ 1106