glibc (2.38)

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