April 2024 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 | 11 | 12 |
0001: /* Copyright (C) 1991-2009, 2010, 2011 Free Software Foundation, Inc. 0002: This file is part of the GNU C Library. 0003: 0004: The GNU C Library is free software; you can redistribute it and/or 0005: modify it under the terms of the GNU Lesser General Public 0006: License as published by the Free Software Foundation; either 0007: version 2.1 of the License, or (at your option) any later version. 0008: 0009: The GNU C Library is distributed in the hope that it will be useful, 0010: but WITHOUT ANY WARRANTY; without even the implied warranty of 0011: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0012: Lesser General Public License for more details. 0013: 0014: You should have received a copy of the GNU Lesser General Public 0015: License along with the GNU C Library; if not, write to the Free 0016: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 0017: 02111-1307 USA. */ 0018: 0019: /* 0020: * POSIX Standard: 2.10 Symbolic Constants <unistd.h> 0021: */ 0022: 0023: #ifndef _UNISTD_H 0024: #define _UNISTD_H 1 0025: 0026: #include <features.h> 0027: 0028: __BEGIN_DECLS 0029: 0030: /* These may be used to determine what facilities are present at compile time. 0031: Their values can be obtained at run time from `sysconf'. */ 0032: 0033: #ifdef __USE_XOPEN2K8 0034: /* POSIX Standard approved as ISO/IEC 9945-1 as of September 2008. */ 0035: # define _POSIX_VERSION 200809L 0036: #elif defined __USE_XOPEN2K 0037: /* POSIX Standard approved as ISO/IEC 9945-1 as of December 2001. */ 0038: # define _POSIX_VERSION 200112L 0039: #elif defined __USE_POSIX199506 0040: /* POSIX Standard approved as ISO/IEC 9945-1 as of June 1995. */ 0041: # define _POSIX_VERSION 199506L 0042: #elif defined __USE_POSIX199309 0043: /* POSIX Standard approved as ISO/IEC 9945-1 as of September 1993. */ 0044: # define _POSIX_VERSION 199309L 0045: #else 0046: /* POSIX Standard approved as ISO/IEC 9945-1 as of September 1990. */ 0047: # define _POSIX_VERSION 199009L 0048: #endif 0049: 0050: /* These are not #ifdef __USE_POSIX2 because they are 0051: in the theoretically application-owned namespace. */ 0052: 0053: #ifdef __USE_XOPEN2K8 0054: # define __POSIX2_THIS_VERSION 200809L 0055: /* The utilities on GNU systems also correspond to this version. */ 0056: #elif defined __USE_XOPEN2K 0057: /* The utilities on GNU systems also correspond to this version. */ 0058: # define __POSIX2_THIS_VERSION 200112L 0059: #elif defined __USE_POSIX199506 0060: /* The utilities on GNU systems also correspond to this version. */ 0061: # define __POSIX2_THIS_VERSION 199506L 0062: #else 0063: /* The utilities on GNU systems also correspond to this version. */ 0064: # define __POSIX2_THIS_VERSION 199209L 0065: #endif 0066: 0067: /* The utilities on GNU systems also correspond to this version. */ 0068: #define _POSIX2_VERSION __POSIX2_THIS_VERSION 0069: 0070: /* If defined, the implementation supports the 0071: C Language Bindings Option. */ 0072: #define _POSIX2_C_BIND __POSIX2_THIS_VERSION 0073: 0074: /* If defined, the implementation supports the 0075: C Language Development Utilities Option. */ 0076: #define _POSIX2_C_DEV __POSIX2_THIS_VERSION 0077: 0078: /* If defined, the implementation supports the 0079: Software Development Utilities Option. */ 0080: #define _POSIX2_SW_DEV __POSIX2_THIS_VERSION 0081: 0082: /* If defined, the implementation supports the 0083: creation of locales with the localedef utility. */ 0084: #define _POSIX2_LOCALEDEF __POSIX2_THIS_VERSION 0085: 0086: /* X/Open version number to which the library conforms. It is selectable. */ 0087: #ifdef __USE_XOPEN2K8 0088: # define _XOPEN_VERSION 700 0089: #elif defined __USE_XOPEN2K 0090: # define _XOPEN_VERSION 600 0091: #elif defined __USE_UNIX98 0092: # define _XOPEN_VERSION 500 0093: #else 0094: # define _XOPEN_VERSION 4 0095: #endif 0096: 0097: /* Commands and utilities from XPG4 are available. */ 0098: #define _XOPEN_XCU_VERSION 4 0099: 0100: /* We are compatible with the old published standards as well. */ 0101: #define _XOPEN_XPG2 1 0102: #define _XOPEN_XPG3 1 0103: #define _XOPEN_XPG4 1 0104: 0105: /* The X/Open Unix extensions are available. */ 0106: #define _XOPEN_UNIX 1 0107: 0108: /* Encryption is present. */ 0109: #define _XOPEN_CRYPT 1 0110: 0111: /* The enhanced internationalization capabilities according to XPG4.2 0112: are present. */ 0113: #define _XOPEN_ENH_I18N 1 0114: 0115: /* The legacy interfaces are also available. */ 0116: #define _XOPEN_LEGACY 1 0117: 0118: 0119: /* Get values of POSIX options: 0120: 0121: If these symbols are defined, the corresponding features are 0122: always available. If not, they may be available sometimes. 0123: The current values can be obtained with `sysconf'. 0124: 0125: _POSIX_JOB_CONTROL Job control is supported. 0126: _POSIX_SAVED_IDS Processes have a saved set-user-ID 0127: and a saved set-group-ID. 0128: _POSIX_REALTIME_SIGNALS Real-time, queued signals are supported. 0129: _POSIX_PRIORITY_SCHEDULING Priority scheduling is supported. 0130: _POSIX_TIMERS POSIX.4 clocks and timers are supported. 0131: _POSIX_ASYNCHRONOUS_IO Asynchronous I/O is supported. 0132: _POSIX_PRIORITIZED_IO Prioritized asynchronous I/O is supported. 0133: _POSIX_SYNCHRONIZED_IO Synchronizing file data is supported. 0134: _POSIX_FSYNC The fsync function is present. 0135: _POSIX_MAPPED_FILES Mapping of files to memory is supported. 0136: _POSIX_MEMLOCK Locking of all memory is supported. 0137: _POSIX_MEMLOCK_RANGE Locking of ranges of memory is supported. 0138: _POSIX_MEMORY_PROTECTION Setting of memory protections is supported. 0139: _POSIX_MESSAGE_PASSING POSIX.4 message queues are supported. 0140: _POSIX_SEMAPHORES POSIX.4 counting semaphores are supported. 0141: _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported. 0142: _POSIX_THREADS POSIX.1c pthreads are supported. 0143: _POSIX_THREAD_ATTR_STACKADDR Thread stack address attribute option supported. 0144: _POSIX_THREAD_ATTR_STACKSIZE Thread stack size attribute option supported. 0145: _POSIX_THREAD_SAFE_FUNCTIONS Thread-safe functions are supported. 0146: _POSIX_THREAD_PRIORITY_SCHEDULING 0147: POSIX.1c thread execution scheduling supported. 0148: _POSIX_THREAD_PRIO_INHERIT Thread priority inheritance option supported. 0149: _POSIX_THREAD_PRIO_PROTECT Thread priority protection option supported. 0150: _POSIX_THREAD_PROCESS_SHARED Process-shared synchronization supported. 0151: _POSIX_PII Protocol-independent interfaces are supported. 0152: _POSIX_PII_XTI XTI protocol-indep. interfaces are supported. 0153: _POSIX_PII_SOCKET Socket protocol-indep. interfaces are supported. 0154: _POSIX_PII_INTERNET Internet family of protocols supported. 0155: _POSIX_PII_INTERNET_STREAM Connection-mode Internet protocol supported. 0156: _POSIX_PII_INTERNET_DGRAM Connectionless Internet protocol supported. 0157: _POSIX_PII_OSI ISO/OSI family of protocols supported. 0158: _POSIX_PII_OSI_COTS Connection-mode ISO/OSI service supported. 0159: _POSIX_PII_OSI_CLTS Connectionless ISO/OSI service supported. 0160: _POSIX_POLL Implementation supports `poll' function. 0161: _POSIX_SELECT Implementation supports `select' and `pselect'. 0162: 0163: _XOPEN_REALTIME X/Open realtime support is available. 0164: _XOPEN_REALTIME_THREADS X/Open realtime thread support is available. 0165: _XOPEN_SHM Shared memory interface according to XPG4.2. 0166: 0167: _XBS5_ILP32_OFF32 Implementation provides environment with 32-bit 0168: int, long, pointer, and off_t types. 0169: _XBS5_ILP32_OFFBIG Implementation provides environment with 32-bit 0170: int, long, and pointer and off_t with at least 0171: 64 bits. 0172: _XBS5_LP64_OFF64 Implementation provides environment with 32-bit 0173: int, and 64-bit long, pointer, and off_t types. 0174: _XBS5_LPBIG_OFFBIG Implementation provides environment with at 0175: least 32 bits int and long, pointer, and off_t 0176: with at least 64 bits. 0177: 0178: If any of these symbols is defined as -1, the corresponding option is not 0179: true for any file. If any is defined as other than -1, the corresponding 0180: option is true for all files. If a symbol is not defined at all, the value 0181: for a specific file can be obtained from `pathconf' and `fpathconf'. 0182: 0183: _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change 0184: the owner of a file. `chown' can only be used 0185: to change the group ID of a file to a group of 0186: which the calling process is a member. 0187: _POSIX_NO_TRUNC Pathname components longer than 0188: NAME_MAX generate an error. 0189: _POSIX_VDISABLE If defined, if the value of an element of the 0190: `c_cc' member of `struct termios' is 0191: _POSIX_VDISABLE, no character will have the 0192: effect associated with that element. 0193: _POSIX_SYNC_IO Synchronous I/O may be performed. 0194: _POSIX_ASYNC_IO Asynchronous I/O may be performed. 0195: _POSIX_PRIO_IO Prioritized Asynchronous I/O may be performed. 0196: 0197: Support for the Large File Support interface is not generally available. 0198: If it is available the following constants are defined to one. 0199: _LFS64_LARGEFILE Low-level I/O supports large files. 0200: _LFS64_STDIO Standard I/O supports large files. 0201: */ 0202: 0203: #include <bits/posix_opt.h> 0204: 0205: /* Get the environment definitions from Unix98. */ 0206: #if defined __USE_UNIX98 || defined __USE_XOPEN2K 0207: # include <bits/environments.h> 0208: #endif 0209: 0210: /* Standard file descriptors. */ 0211: #define STDIN_FILENO 0 /* Standard input. */ 0212: #define STDOUT_FILENO 1 /* Standard output. */ 0213: #define STDERR_FILENO 2 /* Standard error output. */ 0214: 0215: 0216: /* All functions that are not declared anywhere else. */ 0217: 0218: #include <bits/types.h> 0219: 0220: #ifndef __ssize_t_defined 0221: typedef __ssize_t ssize_t; 0222: # define __ssize_t_defined 0223: #endif 0224: 0225: #define __need_size_t 0226: #define __need_NULL 0227: #include <stddef.h> 0228: 0229: #if defined __USE_XOPEN || defined __USE_XOPEN2K 0230: /* The Single Unix specification says that some more types are 0231: available here. */ 0232: # ifndef __gid_t_defined 0233: typedef __gid_t gid_t; 0234: # define __gid_t_defined 0235: # endif 0236: 0237: # ifndef __uid_t_defined 0238: typedef __uid_t uid_t; 0239: # define __uid_t_defined 0240: # endif 0241: 0242: # ifndef __off_t_defined 0243: # ifndef __USE_FILE_OFFSET64 0244: typedef __off_t off_t; 0245: # else 0246: typedef __off64_t off_t; 0247: # endif 0248: # define __off_t_defined 0249: # endif 0250: # if defined __USE_LARGEFILE64 && !defined __off64_t_defined 0251: typedef __off64_t off64_t; 0252: # define __off64_t_defined 0253: # endif 0254: 0255: # ifndef __useconds_t_defined 0256: typedef __useconds_t useconds_t; 0257: # define __useconds_t_defined 0258: # endif 0259: 0260: # ifndef __pid_t_defined 0261: typedef __pid_t pid_t; 0262: # define __pid_t_defined 0263: # endif 0264: #endif /* X/Open */ 0265: 0266: #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K 0267: # ifndef __intptr_t_defined 0268: typedef __intptr_t intptr_t; 0269: # define __intptr_t_defined 0270: # endif 0271: #endif 0272: 0273: #if defined __USE_BSD || defined __USE_XOPEN 0274: # ifndef __socklen_t_defined 0275: typedef __socklen_t socklen_t; 0276: # define __socklen_t_defined 0277: # endif 0278: #endif 0279: 0280: /* Values for the second argument to access. 0281: These may be OR'd together. */ 0282: #define R_OK 4 /* Test for read permission. */ 0283: #define W_OK 2 /* Test for write permission. */ 0284: #define X_OK 1 /* Test for execute permission. */ 0285: #define F_OK 0 /* Test for existence. */ 0286: 0287: /* Test for access to NAME using the real UID and real GID. */ 0288: extern int access (__const char *__name, int __type) __THROW __nonnull ((1)); 0289: 0290: #ifdef __USE_GNU 0291: /* Test for access to NAME using the effective UID and GID 0292: (as normal file operations use). */ 0293: extern int euidaccess (__const char *__name, int __type) 0294: __THROW __nonnull ((1)); 0295: 0296: /* An alias for `euidaccess', used by some other systems. */ 0297: extern int eaccess (__const char *__name, int __type) 0298: __THROW __nonnull ((1)); 0299: #endif 0300: 0301: #ifdef __USE_ATFILE 0302: /* Test for access to FILE relative to the directory FD is open on. 0303: If AT_EACCESS is set in FLAG, then use effective IDs like `eaccess', 0304: otherwise use real IDs like `access'. */ 0305: extern int faccessat (int __fd, __const char *__file, int __type, int __flag) 0306: __THROW __nonnull ((2)) __wur; 0307: #endif /* Use GNU. */ 0308: 0309: 0310: /* Values for the WHENCE argument to lseek. */ 0311: #ifndef _STDIO_H /* <stdio.h> has the same definitions. */ 0312: # define SEEK_SET 0 /* Seek from beginning of file. */ 0313: # define SEEK_CUR 1 /* Seek from current position. */ 0314: # define SEEK_END 2 /* Seek from end of file. */ 0315: # ifdef __USE_GNU 0316: # define SEEK_DATA 3 /* Seek to next data. */ 0317: # define SEEK_HOLE 4 /* Seek to next hole. */ 0318: # endif 0319: #endif 0320: 0321: #if defined __USE_BSD && !defined L_SET 0322: /* Old BSD names for the same constants; just for compatibility. */ 0323: # define L_SET SEEK_SET 0324: # define L_INCR SEEK_CUR 0325: # define L_XTND SEEK_END 0326: #endif 0327: 0328: 0329: /* Move FD's file position to OFFSET bytes from the 0330: beginning of the file (if WHENCE is SEEK_SET), 0331: the current position (if WHENCE is SEEK_CUR), 0332: or the end of the file (if WHENCE is SEEK_END). 0333: Return the new file position. */ 0334: #ifndef __USE_FILE_OFFSET64 0335: extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW; 0336: #else 0337: # ifdef __REDIRECT_NTH 0338: extern __off64_t __REDIRECT_NTH (lseek, 0339: (int __fd, __off64_t __offset, int __whence), 0340: lseek64); 0341: # else 0342: # define lseek lseek64 0343: # endif 0344: #endif 0345: #ifdef __USE_LARGEFILE64 0346: extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) 0347: __THROW; 0348: #endif 0349: 0350: /* Close the file descriptor FD. 0351: 0352: This function is a cancellation point and therefore not marked with 0353: __THROW. */ 0354: extern int close (int __fd); 0355: 0356: /* Read NBYTES into BUF from FD. Return the 0357: number read, -1 for errors or 0 for EOF. 0358: 0359: This function is a cancellation point and therefore not marked with 0360: __THROW. */ 0361: extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __wur; 0362: 0363: /* Write N bytes of BUF to FD. Return the number written, or -1. 0364: 0365: This function is a cancellation point and therefore not marked with 0366: __THROW. */ 0367: extern ssize_t write (int __fd, __const void *__buf, size_t __n) __wur; 0368: 0369: #if defined __USE_UNIX98 || defined __USE_XOPEN2K8 0370: # ifndef __USE_FILE_OFFSET64 0371: /* Read NBYTES into BUF from FD at the given position OFFSET without 0372: changing the file pointer. Return the number read, -1 for errors 0373: or 0 for EOF. 0374: 0375: This function is a cancellation point and therefore not marked with 0376: __THROW. */ 0377: extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, 0378: __off_t __offset) __wur; 0379: 0380: /* Write N bytes of BUF to FD at the given position OFFSET without 0381: changing the file pointer. Return the number written, or -1. 0382: 0383: This function is a cancellation point and therefore not marked with 0384: __THROW. */ 0385: extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n, 0386: __off_t __offset) __wur; 0387: # else 0388: # ifdef __REDIRECT 0389: extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes, 0390: __off64_t __offset), 0391: pread64) __wur; 0392: extern ssize_t __REDIRECT (pwrite, (int __fd, __const void *__buf, 0393: size_t __nbytes, __off64_t __offset), 0394: pwrite64) __wur; 0395: # else 0396: # define pread pread64 0397: # define pwrite pwrite64 0398: # endif 0399: # endif 0400: 0401: # ifdef __USE_LARGEFILE64 0402: /* Read NBYTES into BUF from FD at the given position OFFSET without 0403: changing the file pointer. Return the number read, -1 for errors 0404: or 0 for EOF. */ 0405: extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes, 0406: __off64_t __offset) __wur; 0407: /* Write N bytes of BUF to FD at the given position OFFSET without 0408: changing the file pointer. Return the number written, or -1. */ 0409: extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n, 0410: __off64_t __offset) __wur; 0411: # endif 0412: #endif 0413: 0414: /* Create a one-way communication channel (pipe). 0415: If successful, two file descriptors are stored in PIPEDES; 0416: bytes written on PIPEDES[1] can be read from PIPEDES[0]. 0417: Returns 0 if successful, -1 if not. */ 0418: extern int pipe (int __pipedes[2]) __THROW __wur; 0419: 0420: #ifdef __USE_GNU 0421: /* Same as pipe but apply flags passed in FLAGS to the new file 0422: descriptors. */ 0423: extern int pipe2 (int __pipedes[2], int __flags) __THROW __wur; 0424: #endif 0425: 0426: /* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM. 0427: If SECONDS is zero, any currently scheduled alarm will be cancelled. 0428: The function returns the number of seconds remaining until the last 0429: alarm scheduled would have signaled, or zero if there wasn't one. 0430: There is no return value to indicate an error, but you can set `errno' 0431: to 0 and check its value after calling `alarm', and this might tell you. 0432: The signal may come late due to processor scheduling. */ 0433: extern unsigned int alarm (unsigned int __seconds) __THROW; 0434: 0435: /* Make the process sleep for SECONDS seconds, or until a signal arrives 0436: and is not ignored. The function returns the number of seconds less 0437: than SECONDS which it actually slept (thus zero if it slept the full time). 0438: If a signal handler does a `longjmp' or modifies the handling of the 0439: SIGALRM signal while inside `sleep' call, the handling of the SIGALRM 0440: signal afterwards is undefined. There is no return value to indicate 0441: error, but if `sleep' returns SECONDS, it probably didn't work. 0442: 0443: This function is a cancellation point and therefore not marked with 0444: __THROW. */ 0445: extern unsigned int sleep (unsigned int __seconds); 0446: 0447: #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ 0448: || defined __USE_BSD 0449: /* Set an alarm to go off (generating a SIGALRM signal) in VALUE 0450: microseconds. If INTERVAL is nonzero, when the alarm goes off, the 0451: timer is reset to go off every INTERVAL microseconds thereafter. 0452: Returns the number of microseconds remaining before the alarm. */ 0453: extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval) 0454: __THROW; 0455: 0456: /* Sleep USECONDS microseconds, or until a signal arrives that is not blocked 0457: or ignored. 0458: 0459: This function is a cancellation point and therefore not marked with 0460: __THROW. */ 0461: extern int usleep (__useconds_t __useconds); 0462: #endif 0463: 0464: 0465: /* Suspend the process until a signal arrives. 0466: This always returns -1 and sets `errno' to EINTR. 0467: 0468: This function is a cancellation point and therefore not marked with 0469: __THROW. */ 0470: extern int pause (void); 0471: 0472: 0473: /* Change the owner and group of FILE. */ 0474: extern int chown (__const char *__file, __uid_t __owner, __gid_t __group) 0475: __THROW __nonnull ((1)) __wur; 0476: 0477: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 0478: /* Change the owner and group of the file that FD is open on. */ 0479: extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW __wur; 0480: 0481: 0482: /* Change owner and group of FILE, if it is a symbolic 0483: link the ownership of the symbolic link is changed. */ 0484: extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group) 0485: __THROW __nonnull ((1)) __wur; 0486: 0487: #endif /* Use BSD || X/Open Unix. */ 0488: 0489: #ifdef __USE_ATFILE 0490: /* Change the owner and group of FILE relative to the directory FD is open 0491: on. */ 0492: extern int fchownat (int __fd, __const char *__file, __uid_t __owner, 0493: __gid_t __group, int __flag) 0494: __THROW __nonnull ((2)) __wur; 0495: #endif /* Use GNU. */ 0496: 0497: /* Change the process's working directory to PATH. */ 0498: extern int chdir (__const char *__path) __THROW __nonnull ((1)) __wur; 0499: 0500: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 0501: /* Change the process's working directory to the one FD is open on. */ 0502: extern int fchdir (int __fd) __THROW __wur; 0503: #endif 0504: 0505: /* Get the pathname of the current working directory, 0506: and put it in SIZE bytes of BUF. Returns NULL if the 0507: directory couldn't be determined or SIZE was too small. 0508: If successful, returns BUF. In GNU, if BUF is NULL, 0509: an array is allocated with `malloc'; the array is SIZE 0510: bytes long, unless SIZE == 0, in which case it is as 0511: big as necessary. */ 0512: extern char *getcwd (char *__buf, size_t __size) __THROW __wur; 0513: 0514: #ifdef __USE_GNU 0515: /* Return a malloc'd string containing the current directory name. 0516: If the environment variable `PWD' is set, and its value is correct, 0517: that value is used. */ 0518: extern char *get_current_dir_name (void) __THROW; 0519: #endif 0520: 0521: #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ 0522: || defined __USE_BSD 0523: /* Put the absolute pathname of the current working directory in BUF. 0524: If successful, return BUF. If not, put an error message in 0525: BUF and return NULL. BUF should be at least PATH_MAX bytes long. */ 0526: extern char *getwd (char *__buf) 0527: __THROW __nonnull ((1)) __attribute_deprecated__ __wur; 0528: #endif 0529: 0530: 0531: /* Duplicate FD, returning a new file descriptor on the same file. */ 0532: extern int dup (int __fd) __THROW __wur; 0533: 0534: /* Duplicate FD to FD2, closing FD2 and making it open on the same file. */ 0535: extern int dup2 (int __fd, int __fd2) __THROW; 0536: 0537: #ifdef __USE_GNU 0538: /* Duplicate FD to FD2, closing FD2 and making it open on the same 0539: file while setting flags according to FLAGS. */ 0540: extern int dup3 (int __fd, int __fd2, int __flags) __THROW; 0541: #endif 0542: 0543: /* NULL-terminated array of "NAME=VALUE" environment variables. */ 0544: extern char **__environ; 0545: #ifdef __USE_GNU 0546: extern char **environ; 0547: #endif 0548: 0549: 0550: /* Replace the current process, executing PATH with arguments ARGV and 0551: environment ENVP. ARGV and ENVP are terminated by NULL pointers. */ 0552: extern int execve (__const char *__path, char *__const __argv[], 0553: char *__const __envp[]) __THROW __nonnull ((1, 2)); 0554: 0555: #ifdef __USE_XOPEN2K8 0556: /* Execute the file FD refers to, overlaying the running program image. 0557: ARGV and ENVP are passed to the new program, as for `execve'. */ 0558: extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[]) 0559: __THROW __nonnull ((2)); 0560: #endif 0561: 0562: 0563: /* Execute PATH with arguments ARGV and environment from `environ'. */ 0564: extern int execv (__const char *__path, char *__const __argv[]) 0565: __THROW __nonnull ((1, 2)); 0566: 0567: /* Execute PATH with all arguments after PATH until a NULL pointer, 0568: and the argument after that for environment. */ 0569: extern int execle (__const char *__path, __const char *__arg, ...) 0570: __THROW __nonnull ((1, 2)); 0571: 0572: /* Execute PATH with all arguments after PATH until 0573: a NULL pointer and environment from `environ'. */ 0574: extern int execl (__const char *__path, __const char *__arg, ...) 0575: __THROW __nonnull ((1, 2)); 0576: 0577: /* Execute FILE, searching in the `PATH' environment variable if it contains 0578: no slashes, with arguments ARGV and environment from `environ'. */ 0579: extern int execvp (__const char *__file, char *__const __argv[]) 0580: __THROW __nonnull ((1, 2)); 0581: 0582: /* Execute FILE, searching in the `PATH' environment variable if 0583: it contains no slashes, with all arguments after FILE until a 0584: NULL pointer and environment from `environ'. */ 0585: extern int execlp (__const char *__file, __const char *__arg, ...) 0586: __THROW __nonnull ((1, 2)); 0587: 0588: #ifdef __USE_GNU 0589: /* Execute FILE, searching in the `PATH' environment variable if it contains 0590: no slashes, with arguments ARGV and environment from `environ'. */ 0591: extern int execvpe (__const char *__file, char *__const __argv[], 0592: char *__const __envp[]) 0593: __THROW __nonnull ((1, 2)); 0594: #endif 0595: 0596: 0597: #if defined __USE_MISC || defined __USE_XOPEN 0598: /* Add INC to priority of the current process. */ 0599: extern int nice (int __inc) __THROW __wur; 0600: #endif 0601: 0602: 0603: /* Terminate program execution with the low-order 8 bits of STATUS. */ 0604: extern void _exit (int __status) __attribute__ ((__noreturn__)); 0605: 0606: 0607: /* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf'; 0608: the `_SC_*' symbols for the NAME argument to `sysconf'; 0609: and the `_CS_*' symbols for the NAME argument to `confstr'. */ 0610: #include <bits/confname.h> 0611: 0612: /* Get file-specific configuration information about PATH. */ 0613: extern long int pathconf (__const char *__path, int __name) 0614: __THROW __nonnull ((1)); 0615: 0616: /* Get file-specific configuration about descriptor FD. */ 0617: extern long int fpathconf (int __fd, int __name) __THROW; 0618: 0619: /* Get the value of the system variable NAME. */ 0620: extern long int sysconf (int __name) __THROW; 0621: 0622: #ifdef __USE_POSIX2 0623: /* Get the value of the string-valued system variable NAME. */ 0624: extern size_t confstr (int __name, char *__buf, size_t __len) __THROW; 0625: #endif 0626: 0627: 0628: /* Get the process ID of the calling process. */ 0629: extern __pid_t getpid (void) __THROW; 0630: 0631: /* Get the process ID of the calling process's parent. */ 0632: extern __pid_t getppid (void) __THROW; 0633: 0634: /* Get the process group ID of the calling process. 0635: This function is different on old BSD. */ 0636: #ifndef __FAVOR_BSD 0637: extern __pid_t getpgrp (void) __THROW; 0638: #else 0639: # ifdef __REDIRECT_NTH 0640: extern __pid_t __REDIRECT_NTH (getpgrp, (__pid_t __pid), __getpgid); 0641: # else 0642: # define getpgrp __getpgid 0643: # endif 0644: #endif 0645: 0646: /* Get the process group ID of process PID. */ 0647: extern __pid_t __getpgid (__pid_t __pid) __THROW; 0648: #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 0649: extern __pid_t getpgid (__pid_t __pid) __THROW; 0650: #endif 0651: 0652: 0653: /* Set the process group ID of the process matching PID to PGID. 0654: If PID is zero, the current process's process group ID is set. 0655: If PGID is zero, the process ID of the process is used. */ 0656: extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW; 0657: 0658: #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED 0659: /* Both System V and BSD have `setpgrp' functions, but with different 0660: calling conventions. The BSD function is the same as POSIX.1 `setpgid' 0661: (above). The System V function takes no arguments and puts the calling 0662: process in its on group like `setpgid (0, 0)'. 0663: 0664: New programs should always use `setpgid' instead. 0665: 0666: The default in GNU is to provide the System V function. The BSD 0667: function is available under -D_BSD_SOURCE. */ 0668: 0669: # ifndef __FAVOR_BSD 0670: 0671: /* Set the process group ID of the calling process to its own PID. 0672: This is exactly the same as `setpgid (0, 0)'. */ 0673: extern int setpgrp (void) __THROW; 0674: 0675: # else 0676: 0677: /* Another name for `setpgid' (above). */ 0678: # ifdef __REDIRECT_NTH 0679: extern int __REDIRECT_NTH (setpgrp, (__pid_t __pid, __pid_t __pgrp), setpgid); 0680: # else 0681: # define setpgrp setpgid 0682: # endif 0683: 0684: # endif /* Favor BSD. */ 0685: #endif /* Use SVID or BSD. */ 0686: 0687: /* Create a new session with the calling process as its leader. 0688: The process group IDs of the session and the calling process 0689: are set to the process ID of the calling process, which is returned. */ 0690: extern __pid_t setsid (void) __THROW; 0691: 0692: #if defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 0693: /* Return the session ID of the given process. */ 0694: extern __pid_t getsid (__pid_t __pid) __THROW; 0695: #endif 0696: 0697: /* Get the real user ID of the calling process. */ 0698: extern __uid_t getuid (void) __THROW; 0699: 0700: /* Get the effective user ID of the calling process. */ 0701: extern __uid_t geteuid (void) __THROW; 0702: 0703: /* Get the real group ID of the calling process. */ 0704: extern __gid_t getgid (void) __THROW; 0705: 0706: /* Get the effective group ID of the calling process. */ 0707: extern __gid_t getegid (void) __THROW; 0708: 0709: /* If SIZE is zero, return the number of supplementary groups 0710: the calling process is in. Otherwise, fill in the group IDs 0711: of its supplementary groups in LIST and return the number written. */ 0712: extern int getgroups (int __size, __gid_t __list[]) __THROW __wur; 0713: 0714: #ifdef __USE_GNU 0715: /* Return nonzero iff the calling process is in group GID. */ 0716: extern int group_member (__gid_t __gid) __THROW; 0717: #endif 0718: 0719: /* Set the user ID of the calling process to UID. 0720: If the calling process is the super-user, set the real 0721: and effective user IDs, and the saved set-user-ID to UID; 0722: if not, the effective user ID is set to UID. */ 0723: extern int setuid (__uid_t __uid) __THROW; 0724: 0725: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 0726: /* Set the real user ID of the calling process to RUID, 0727: and the effective user ID of the calling process to EUID. */ 0728: extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW; 0729: #endif 0730: 0731: #if defined __USE_BSD || defined __USE_XOPEN2K 0732: /* Set the effective user ID of the calling process to UID. */ 0733: extern int seteuid (__uid_t __uid) __THROW; 0734: #endif /* Use BSD. */ 0735: 0736: /* Set the group ID of the calling process to GID. 0737: If the calling process is the super-user, set the real 0738: and effective group IDs, and the saved set-group-ID to GID; 0739: if not, the effective group ID is set to GID. */ 0740: extern int setgid (__gid_t __gid) __THROW; 0741: 0742: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 0743: /* Set the real group ID of the calling process to RGID, 0744: and the effective group ID of the calling process to EGID. */ 0745: extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW; 0746: #endif 0747: 0748: #if defined __USE_BSD || defined __USE_XOPEN2K 0749: /* Set the effective group ID of the calling process to GID. */ 0750: extern int setegid (__gid_t __gid) __THROW; 0751: #endif /* Use BSD. */ 0752: 0753: #ifdef __USE_GNU 0754: /* Fetch the real user ID, effective user ID, and saved-set user ID, 0755: of the calling process. */ 0756: extern int getresuid (__uid_t *__ruid, __uid_t *__euid, __uid_t *__suid) 0757: __THROW; 0758: 0759: /* Fetch the real group ID, effective group ID, and saved-set group ID, 0760: of the calling process. */ 0761: extern int getresgid (__gid_t *__rgid, __gid_t *__egid, __gid_t *__sgid) 0762: __THROW; 0763: 0764: /* Set the real user ID, effective user ID, and saved-set user ID, 0765: of the calling process to RUID, EUID, and SUID, respectively. */ 0766: extern int setresuid (__uid_t __ruid, __uid_t __euid, __uid_t __suid) 0767: __THROW; 0768: 0769: /* Set the real group ID, effective group ID, and saved-set group ID, 0770: of the calling process to RGID, EGID, and SGID, respectively. */ 0771: extern int setresgid (__gid_t __rgid, __gid_t __egid, __gid_t __sgid) 0772: __THROW; 0773: #endif 0774: 0775: 0776: /* Clone the calling process, creating an exact copy. 0777: Return -1 for errors, 0 to the new process, 0778: and the process ID of the new process to the old process. */ 0779: extern __pid_t fork (void) __THROWNL; 0780: 0781: #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K8) \ 0782: || defined __USE_BSD 0783: /* Clone the calling process, but without copying the whole address space. 0784: The calling process is suspended until the new process exits or is 0785: replaced by a call to `execve'. Return -1 for errors, 0 to the new process, 0786: and the process ID of the new process to the old process. */ 0787: extern __pid_t vfork (void) __THROW; 0788: #endif /* Use BSD or XPG < 7. */ 0789: 0790: 0791: /* Return the pathname of the terminal FD is open on, or NULL on errors. 0792: The returned storage is good only until the next call to this function. */ 0793: extern char *ttyname (int __fd) __THROW; 0794: 0795: /* Store at most BUFLEN characters of the pathname of the terminal FD is 0796: open on in BUF. Return 0 on success, otherwise an error number. */ 0797: extern int ttyname_r (int __fd, char *__buf, size_t __buflen) 0798: __THROW __nonnull ((2)) __wur; 0799: 0800: /* Return 1 if FD is a valid descriptor associated 0801: with a terminal, zero if not. */ 0802: extern int isatty (int __fd) __THROW; 0803: 0804: #if defined __USE_BSD \ 0805: || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98) 0806: /* Return the index into the active-logins file (utmp) for 0807: the controlling terminal. */ 0808: extern int ttyslot (void) __THROW; 0809: #endif 0810: 0811: 0812: /* Make a link to FROM named TO. */ 0813: extern int link (__const char *__from, __const char *__to) 0814: __THROW __nonnull ((1, 2)) __wur; 0815: 0816: #ifdef __USE_ATFILE 0817: /* Like link but relative paths in TO and FROM are interpreted relative 0818: to FROMFD and TOFD respectively. */ 0819: extern int linkat (int __fromfd, __const char *__from, int __tofd, 0820: __const char *__to, int __flags) 0821: __THROW __nonnull ((2, 4)) __wur; 0822: #endif 0823: 0824: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K 0825: /* Make a symbolic link to FROM named TO. */ 0826: extern int symlink (__const char *__from, __const char *__to) 0827: __THROW __nonnull ((1, 2)) __wur; 0828: 0829: /* Read the contents of the symbolic link PATH into no more than 0830: LEN bytes of BUF. The contents are not null-terminated. 0831: Returns the number of characters read, or -1 for errors. */ 0832: extern ssize_t readlink (__const char *__restrict __path, 0833: char *__restrict __buf, size_t __len) 0834: __THROW __nonnull ((1, 2)) __wur; 0835: #endif /* Use BSD. */ 0836: 0837: #ifdef __USE_ATFILE 0838: /* Like symlink but a relative path in TO is interpreted relative to TOFD. */ 0839: extern int symlinkat (__const char *__from, int __tofd, 0840: __const char *__to) __THROW __nonnull ((1, 3)) __wur; 0841: 0842: /* Like readlink but a relative PATH is interpreted relative to FD. */ 0843: extern ssize_t readlinkat (int __fd, __const char *__restrict __path, 0844: char *__restrict __buf, size_t __len) 0845: __THROW __nonnull ((2, 3)) __wur; 0846: #endif 0847: 0848: /* Remove the link NAME. */ 0849: extern int unlink (__const char *__name) __THROW __nonnull ((1)); 0850: 0851: #ifdef __USE_ATFILE 0852: /* Remove the link NAME relative to FD. */ 0853: extern int unlinkat (int __fd, __const char *__name, int __flag) 0854: __THROW __nonnull ((2)); 0855: #endif 0856: 0857: /* Remove the directory PATH. */ 0858: extern int rmdir (__const char *__path) __THROW __nonnull ((1)); 0859: 0860: 0861: /* Return the foreground process group ID of FD. */ 0862: extern __pid_t tcgetpgrp (int __fd) __THROW; 0863: 0864: /* Set the foreground process group ID of FD set PGRP_ID. */ 0865: extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW; 0866: 0867: 0868: /* Return the login name of the user. 0869: 0870: This function is a possible cancellation point and therefore not 0871: marked with __THROW. */ 0872: extern char *getlogin (void); 0873: #if defined __USE_REENTRANT || defined __USE_POSIX199506 0874: /* Return at most NAME_LEN characters of the login name of the user in NAME. 0875: If it cannot be determined or some other error occurred, return the error 0876: code. Otherwise return 0. 0877: 0878: This function is a possible cancellation point and therefore not 0879: marked with __THROW. */ 0880: extern int getlogin_r (char *__name, size_t __name_len) __nonnull ((1)); 0881: #endif 0882: 0883: #ifdef __USE_BSD 0884: /* Set the login name returned by `getlogin'. */ 0885: extern int setlogin (__const char *__name) __THROW __nonnull ((1)); 0886: #endif 0887: 0888: 0889: #ifdef __USE_POSIX2 0890: /* Get definitions and prototypes for functions to process the 0891: arguments in ARGV (ARGC of them, minus the program name) for 0892: options given in OPTS. */ 0893: # define __need_getopt 0894: # include <getopt.h> 0895: #endif 0896: 0897: 0898: #if defined __USE_BSD || defined __USE_UNIX98 || defined __USE_XOPEN2K 0899: /* Put the name of the current host in no more than LEN bytes of NAME. 0900: The result is null-terminated if LEN is large enough for the full 0901: name and the terminator. */ 0902: extern int gethostname (char *__name, size_t __len) __THROW __nonnull ((1)); 0903: #endif 0904: 0905: 0906: #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98) 0907: /* Set the name of the current host to NAME, which is LEN bytes long. 0908: This call is restricted to the super-user. */ 0909: extern int sethostname (__const char *__name, size_t __len) 0910: __THROW __nonnull ((1)) __wur; 0911: 0912: /* Set the current machine's Internet number to ID. 0913: This call is restricted to the super-user. */ 0914: extern int sethostid (long int __id) __THROW __wur; 0915: 0916: 0917: /* Get and set the NIS (aka YP) domain name, if any. 0918: Called just like `gethostname' and `sethostname'. 0919: The NIS domain name is usually the empty string when not using NIS. */ 0920: extern int getdomainname (char *__name, size_t __len) 0921: __THROW __nonnull ((1)) __wur; 0922: extern int setdomainname (__const char *__name, size_t __len) 0923: __THROW __nonnull ((1)) __wur; 0924: 0925: 0926: /* Revoke access permissions to all processes currently communicating 0927: with the control terminal, and then send a SIGHUP signal to the process 0928: group of the control terminal. */ 0929: extern int vhangup (void) __THROW; 0930: 0931: /* Revoke the access of all descriptors currently open on FILE. */ 0932: extern int revoke (__const char *__file) __THROW __nonnull ((1)) __wur; 0933: 0934: 0935: /* Enable statistical profiling, writing samples of the PC into at most 0936: SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling 0937: is enabled, the system examines the user PC and increments 0938: SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536]. If SCALE is zero, 0939: disable profiling. Returns zero on success, -1 on error. */ 0940: extern int profil (unsigned short int *__sample_buffer, size_t __size, 0941: size_t __offset, unsigned int __scale) 0942: __THROW __nonnull ((1)); 0943: 0944: 0945: /* Turn accounting on if NAME is an existing file. The system will then write 0946: a record for each process as it terminates, to this file. If NAME is NULL, 0947: turn accounting off. This call is restricted to the super-user. */ 0948: extern int acct (__const char *__name) __THROW; 0949: 0950: 0951: /* Successive calls return the shells listed in `/etc/shells'. */ 0952: extern char *getusershell (void) __THROW; 0953: extern void endusershell (void) __THROW; /* Discard cached info. */ 0954: extern void setusershell (void) __THROW; /* Rewind and re-read the file. */ 0955: 0956: 0957: /* Put the program in the background, and dissociate from the controlling 0958: terminal. If NOCHDIR is zero, do `chdir ("/")'. If NOCLOSE is zero, 0959: redirects stdin, stdout, and stderr to /dev/null. */ 0960: extern int daemon (int __nochdir, int __noclose) __THROW __wur; 0961: #endif /* Use BSD || X/Open. */ 0962: 0963: 0964: #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K) 0965: /* Make PATH be the root directory (the starting point for absolute paths). 0966: This call is restricted to the super-user. */ 0967: extern int chroot (__const char *__path) __THROW __nonnull ((1)) __wur; 0968: 0969: /* Prompt with PROMPT and read a string from the terminal without echoing. 0970: Uses /dev/tty if possible; otherwise stderr and stdin. */ 0971: extern char *getpass (__const char *__prompt) __nonnull ((1)); 0972: #endif /* Use BSD || X/Open. */ 0973: 0974: 0975: #if defined __USE_BSD || defined __USE_XOPEN || defined __USE_XOPEN2K 0976: /* Make all changes done to FD actually appear on disk. 0977: 0978: This function is a cancellation point and therefore not marked with 0979: __THROW. */ 0980: extern int fsync (int __fd); 0981: #endif /* Use BSD || X/Open || Unix98. */ 0982: 0983: 0984: #ifdef __USE_GNU 0985: /* Make all changes done to all files on the file system associated 0986: with FD actually appear on disk. */ 0987: extern int syncfs (int __fd) __THROW; 0988: #endif 0989: 0990: 0991: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED 0992: 0993: /* Return identifier for the current host. */ 0994: extern long int gethostid (void); 0995: 0996: /* Make all changes done to all files actually appear on disk. */ 0997: extern void sync (void) __THROW; 0998: 0999: 1000: # if defined __USE_BSD || !defined __USE_XOPEN2K 1001: /* Return the number of bytes in a page. This is the system's page size, 1002: which is not necessarily the same as the hardware page size. */ 1003: extern int getpagesize (void) __THROW __attribute__ ((__const__)); 1004: 1005: 1006: /* Return the maximum number of file descriptors 1007: the current process could possibly have. */ 1008: extern int getdtablesize (void) __THROW; 1009: # endif 1010: 1011: #endif /* Use BSD || X/Open Unix. */ 1012: 1013: 1014: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K8 1015: 1016: /* Truncate FILE to LENGTH bytes. */ 1017: # ifndef __USE_FILE_OFFSET64 1018: extern int truncate (__const char *__file, __off_t __length) 1019: __THROW __nonnull ((1)) __wur; 1020: # else 1021: # ifdef __REDIRECT_NTH 1022: extern int __REDIRECT_NTH (truncate, 1023: (__const char *__file, __off64_t __length), 1024: truncate64) __nonnull ((1)) __wur; 1025: # else 1026: # define truncate truncate64 1027: # endif 1028: # endif 1029: # ifdef __USE_LARGEFILE64 1030: extern int truncate64 (__const char *__file, __off64_t __length) 1031: __THROW __nonnull ((1)) __wur; 1032: # endif 1033: 1034: #endif /* Use BSD || X/Open Unix || POSIX 2008. */ 1035: 1036: #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED || defined __USE_XOPEN2K 1037: 1038: /* Truncate the file FD is open on to LENGTH bytes. */ 1039: # ifndef __USE_FILE_OFFSET64 1040: extern int ftruncate (int __fd, __off_t __length) __THROW __wur; 1041: # else 1042: # ifdef __REDIRECT_NTH 1043: extern int __REDIRECT_NTH (ftruncate, (int __fd, __off64_t __length), 1044: ftruncate64) __wur; 1045: # else 1046: # define ftruncate ftruncate64 1047: # endif 1048: # endif 1049: # ifdef __USE_LARGEFILE64 1050: extern int ftruncate64 (int __fd, __off64_t __length) __THROW __wur; 1051: # endif 1052: 1053: #endif /* Use BSD || X/Open Unix || POSIX 2003. */ 1054: 1055: 1056: #if (defined __USE_XOPEN_EXTENDED && !defined __USE_XOPEN2K) \ 1057: || defined __USE_MISC 1058: 1059: /* Set the end of accessible data space (aka "the break") to ADDR. 1060: Returns zero on success and -1 for errors (with errno set). */ 1061: extern int brk (void *__addr) __THROW __wur; 1062: 1063: /* Increase or decrease the end of accessible data space by DELTA bytes. 1064: If successful, returns the address the previous end of data space 1065: (i.e. the beginning of the new space, if DELTA > 0); 1066: returns (void *) -1 for errors (with errno set). */ 1067: extern void *sbrk (intptr_t __delta) __THROW; 1068: #endif 1069: 1070: 1071: #ifdef __USE_MISC 1072: /* Invoke `system call' number SYSNO, passing it the remaining arguments. 1073: This is completely system-dependent, and not often useful. 1074: 1075: In Unix, `syscall' sets `errno' for all errors and most calls return -1 1076: for errors; in many systems you cannot pass arguments or get return 1077: values for all system calls (`pipe', `fork', and `getppid' typically 1078: among them). 1079: 1080: In Mach, all system calls take normal arguments and always return an 1081: error code (zero for success). */ 1082: extern long int syscall (long int __sysno, ...) __THROW; 1083: 1084: #endif /* Use misc. */ 1085: 1086: 1087: #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK 1088: /* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both 1089: files consistent. Some systems have them there and some here, and some 1090: software depends on the macros being defined without including both. */ 1091: 1092: /* `lockf' is a simpler interface to the locking facilities of `fcntl'. 1093: LEN is always relative to the current file position. 1094: The CMD argument is one of the following. 1095: 1096: This function is a cancellation point and therefore not marked with 1097: __THROW. */ 1098: 1099: # define F_ULOCK 0 /* Unlock a previously locked region. */ 1100: # define F_LOCK 1 /* Lock a region for exclusive use. */ 1101: # define F_TLOCK 2 /* Test and lock a region for exclusive use. */ 1102: # define F_TEST 3 /* Test a region for other processes locks. */ 1103: 1104: # ifndef __USE_FILE_OFFSET64 1105: extern int lockf (int __fd, int __cmd, __off_t __len) __wur; 1106: # else 1107: # ifdef __REDIRECT 1108: extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len), 1109: lockf64) __wur; 1110: # else 1111: # define lockf lockf64 1112: # endif 1113: # endif 1114: # ifdef __USE_LARGEFILE64 1115: extern int lockf64 (int __fd, int __cmd, __off64_t __len) __wur; 1116: # endif 1117: #endif /* Use misc and F_LOCK not already defined. */ 1118: 1119: 1120: #ifdef __USE_GNU 1121: 1122: /* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno' 1123: set to EINTR. */ 1124: 1125: # define TEMP_FAILURE_RETRY(expression) \ 1126: (__extension__ \ 1127: ({ long int __result; \ 1128: do __result = (long int) (expression); \ 1129: while (__result == -1L && errno == EINTR); \ 1130: __result; })) 1131: #endif 1132: 1133: #if defined __USE_POSIX199309 || defined __USE_UNIX98 1134: /* Synchronize at least the data part of a file with the underlying 1135: media. */ 1136: extern int fdatasync (int __fildes); 1137: #endif /* Use POSIX199309 */ 1138: 1139: 1140: /* XPG4.2 specifies that prototypes for the encryption functions must 1141: be defined here. */ 1142: #ifdef __USE_XOPEN 1143: /* Encrypt at most 8 characters from KEY using salt to perturb DES. */ 1144: extern char *crypt (__const char *__key, __const char *__salt) 1145: __THROW __nonnull ((1, 2)); 1146: 1147: /* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt 1148: block in place. */ 1149: extern void encrypt (char *__libc_block, int __edflag) __THROW __nonnull ((1)); 1150: 1151: 1152: /* Swab pairs bytes in the first N bytes of the area pointed to by 1153: FROM and copy the result to TO. The value of TO must not be in the 1154: range [FROM - N + 1, FROM - 1]. If N is odd the first byte in FROM 1155: is without partner. */ 1156: extern void swab (__const void *__restrict __from, void *__restrict __to, 1157: ssize_t __n) __THROW __nonnull ((1, 2)); 1158: #endif 1159: 1160: 1161: /* The Single Unix specification demands this prototype to be here. 1162: It is also found in <stdio.h>. */ 1163: #if defined __USE_XOPEN || defined __USE_XOPEN2K8 1164: /* Return the name of the controlling terminal. */ 1165: extern char *ctermid (char *__s) __THROW; 1166: #endif 1167: 1168: 1169: /* Define some macros helping to catch buffer overflows. */ 1170: #if __USE_FORTIFY_LEVEL > 0 && defined __extern_always_inline 1171: # include <bits/unistd.h> 1172: #endif 1173: 1174: __END_DECLS 1175: 1176: #endif /* unistd.h */ 1177: