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