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