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