OSDN Git Service

0908c647a19f2b561e083e01ec5228f96cf5ce72
[uclinux-h8/uClibc.git] / include / unistd.h
1 /* Copyright (C) 1991-1999, 2000, 2001 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, write to the Free
16    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17    02111-1307 USA.  */
18
19 /*
20  *      POSIX Standard: 2.10 Symbolic Constants         <unistd.h>
21  */
22
23 #ifndef _UNISTD_H
24 #define _UNISTD_H       1
25
26 #include <features.h>
27
28 __BEGIN_DECLS
29
30 /* These may be used to determine what facilities are present at compile time.
31    Their values can be obtained at run time from `sysconf'.  */
32
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
36
37 /* These are not #ifdef __USE_POSIX2 because they are
38    in the theoretically application-owned namespace.  */
39
40 /* POSIX Standard approved as ISO/IEC 9945-2 as of December, 1993.  */
41 #define _POSIX2_C_VERSION       199209L
42
43 /* The utilities on GNU systems also correspond to this version.  */
44 #define _POSIX2_VERSION 199209L
45
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
58 /* If defined, the implementation supports the
59    creation of locales with the localedef utility.  */
60 #define _POSIX2_LOCALEDEF       1
61
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
68
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
83 /* The enhanced internationalization capabilities according to XPG4.2
84    are present.  */
85 #define _XOPEN_ENH_I18N 1
86
87 /* The legacy interfaces are also available.  */
88 #define _XOPEN_LEGACY   1
89
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
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.
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.
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'.
134
135    _XOPEN_REALTIME              X/Open realtime support is available.
136    _XOPEN_REALTIME_THREADS      X/Open realtime thread support is available.
137    _XOPEN_SHM                   Shared memory interface according to XPG4.2.
138
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
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.
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.
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.
173    */
174
175 #include <bits/posix_opt.h>
176
177 /* Get the environment definitions from Unix98.  */
178 #ifdef __USE_UNIX98
179 # include <bits/environments.h>
180 #endif
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
190 #include <bits/types.h>
191
192 #ifndef __ssize_t_defined
193 typedef __ssize_t ssize_t;
194 # define __ssize_t_defined
195 #endif
196
197 #define __need_size_t
198 #define __need_NULL
199 #include <stddef.h>
200
201 #ifdef __USE_XOPEN
202 /* The Single Unix specification says that some more types are
203    available here.  */
204 # ifndef __gid_t_defined
205 typedef __gid_t gid_t;
206 #  define __gid_t_defined
207 # endif
208
209 # ifndef __uid_t_defined
210 typedef __uid_t uid_t;
211 #  define __uid_t_defined
212 # endif
213
214 # ifndef __off_t_defined
215 #  ifndef __USE_FILE_OFFSET64
216 typedef __off_t off_t;
217 #  else
218 typedef __off64_t off_t;
219 #  endif
220 #  define __off_t_defined
221 # endif
222 # if defined __USE_LARGEFILE64 && !defined __off64_t_defined
223 typedef __off64_t off64_t;
224 #  define __off64_t_defined
225 # endif
226
227 # ifndef __useconds_t_defined
228 typedef __useconds_t useconds_t;
229 #  define __useconds_t_defined
230 # endif
231
232 # ifndef __pid_t_defined
233 typedef __pid_t pid_t;
234 #  define __pid_t_defined
235 # endif
236 #endif  /* X/Open */
237
238 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
239 # ifndef __intptr_t_defined
240 typedef __intptr_t intptr_t;
241 #  define __intptr_t_defined
242 # endif
243 #endif
244
245 #if defined __USE_BSD || defined __USE_XOPEN
246 # ifndef __socklen_t_defined
247 typedef __socklen_t socklen_t;
248 #  define __socklen_t_defined
249 # endif
250 #endif
251
252 /* Values for the second argument to access.
253    These may be OR'd together.  */
254 #define R_OK    4               /* Test for read permission.  */
255 #define W_OK    2               /* Test for write permission.  */
256 #define X_OK    1               /* Test for execute permission.  */
257 #define F_OK    0               /* Test for existence.  */
258
259 /* Test for access to NAME using the real UID and real GID.  */
260 extern int access (__const char *__name, int __type) __THROW;
261
262
263 /* Values for the WHENCE argument to lseek.  */
264 #ifndef _STDIO_H                /* <stdio.h> has the same definitions.  */
265 # define SEEK_SET       0       /* Seek from beginning of file.  */
266 # define SEEK_CUR       1       /* Seek from current position.  */
267 # define SEEK_END       2       /* Seek from end of file.  */
268 #endif
269
270 #if defined __USE_BSD && !defined L_SET
271 /* Old BSD names for the same constants; just for compatibility.  */
272 # define L_SET          SEEK_SET
273 # define L_INCR         SEEK_CUR
274 # define L_XTND         SEEK_END
275 #endif
276
277
278 /* Move FD's file position to OFFSET bytes from the
279    beginning of the file (if WHENCE is SEEK_SET),
280    the current position (if WHENCE is SEEK_CUR),
281    or the end of the file (if WHENCE is SEEK_END).
282    Return the new file position.  */
283 #ifndef __USE_FILE_OFFSET64
284 extern __off_t lseek (int __fd, __off_t __offset, int __whence) __THROW;
285 #else
286 # ifdef __REDIRECT
287 extern __off64_t __REDIRECT (lseek,
288                              (int __fd, __off64_t __offset, int __whence)
289                              __THROW,
290                              lseek64);
291 # else
292 #  define lseek lseek64
293 # endif
294 #endif
295 #ifdef __USE_LARGEFILE64
296 extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) __THROW;
297 #endif
298
299 /* Close the file descriptor FD.  */
300 extern int close (int __fd) __THROW;
301
302 /* Read NBYTES into BUF from FD.  Return the
303    number read, -1 for errors or 0 for EOF.  */
304 extern ssize_t read (int __fd, void *__buf, size_t __nbytes) __THROW;
305
306 /* Write N bytes of BUF to FD.  Return the number written, or -1.  */
307 extern ssize_t write (int __fd, __const void *__buf, size_t __n) __THROW;
308
309 #ifdef __USE_UNIX98
310 # ifndef __USE_FILE_OFFSET64
311 extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
312      __THROW;
313 extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n,
314                        __off_t __offset) __THROW;
315 # else
316 #  ifdef __REDIRECT
317 extern ssize_t __REDIRECT (pread, (int __fd, void *__buf, size_t __nbytes,
318                                    __off64_t __offset) __THROW,
319                            pread64);
320 extern ssize_t __REDIRECT (pwrite, (int __fd, __const void *__buf,
321                                     size_t __nbytes, __off64_t __offset)
322                            __THROW,
323                         pwrite64);
324 #  else
325 #   define pread pread64
326 #   define pwrite pwrite64
327 #  endif
328 # endif
329
330 # ifdef __USE_LARGEFILE64
331 /* Read NBYTES into BUF from FD at the given position OFFSET without
332    changing the file pointer.  Return the number read, -1 for errors
333    or 0 for EOF.  */
334 extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
335                         __off64_t __offset) __THROW;
336 /* Write N bytes of BUF to FD at the given position OFFSET without
337    changing the file pointer.  Return the number written, or -1.  */
338 extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
339                          __off64_t __offset) __THROW;
340 # endif
341 #endif
342
343 /* Create a one-way communication channel (pipe).
344    If successful, two file descriptors are stored in PIPEDES;
345    bytes written on PIPEDES[1] can be read from PIPEDES[0].
346    Returns 0 if successful, -1 if not.  */
347 extern int pipe (int __pipedes[2]) __THROW;
348
349 /* Schedule an alarm.  In SECONDS seconds, the process will get a SIGALRM.
350    If SECONDS is zero, any currently scheduled alarm will be cancelled.
351    The function returns the number of seconds remaining until the last
352    alarm scheduled would have signaled, or zero if there wasn't one.
353    There is no return value to indicate an error, but you can set `errno'
354    to 0 and check its value after calling `alarm', and this might tell you.
355    The signal may come late due to processor scheduling.  */
356 extern unsigned int alarm (unsigned int __seconds) __THROW;
357
358 /* Make the process sleep for SECONDS seconds, or until a signal arrives
359    and is not ignored.  The function returns the number of seconds less
360    than SECONDS which it actually slept (thus zero if it slept the full time).
361    If a signal handler does a `longjmp' or modifies the handling of the
362    SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
363    signal afterwards is undefined.  There is no return value to indicate
364    error, but if `sleep' returns SECONDS, it probably didn't work.  */
365 extern unsigned int sleep (unsigned int __seconds) __THROW;
366
367 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
368 /* Set an alarm to go off (generating a SIGALRM signal) in VALUE
369    microseconds.  If INTERVAL is nonzero, when the alarm goes off, the
370    timer is reset to go off every INTERVAL microseconds thereafter.
371    Returns the number of microseconds remaining before the alarm.  */
372 extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
373      __THROW;
374
375 /* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
376    or ignored.  */
377 extern int usleep (__useconds_t __useconds) __THROW;
378 #endif
379
380
381 /* Suspend the process until a signal arrives.
382    This always returns -1 and sets `errno' to EINTR.  */
383 extern int pause (void) __THROW;
384
385
386 /* Change the owner and group of FILE.  */
387 extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
388      __THROW;
389
390 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
391 /* Change the owner and group of the file that FD is open on.  */
392 extern int fchown (int __fd, __uid_t __owner, __gid_t __group) __THROW;
393
394
395 /* Change owner and group of FILE, if it is a symbolic
396    link the ownership of the symbolic link is changed.  */
397 extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
398      __THROW;
399
400 #endif /* Use BSD || X/Open Unix.  */
401
402 /* Change the process's working directory to PATH.  */
403 extern int chdir (__const char *__path) __THROW;
404
405 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
406 /* Change the process's working directory to the one FD is open on.  */
407 extern int fchdir (int __fd) __THROW;
408 #endif
409
410 /* Get the pathname of the current working directory,
411    and put it in SIZE bytes of BUF.  Returns NULL if the
412    directory couldn't be determined or SIZE was too small.
413    If successful, returns BUF.  In GNU, if BUF is NULL,
414    an array is allocated with `malloc'; the array is SIZE
415    bytes long, unless SIZE == 0, in which case it is as
416    big as necessary.  */
417 extern char *getcwd (char *__buf, size_t __size) __THROW;
418
419 /* Return a malloc'd string containing the current directory name.
420    If the environment variable `PWD' is set, and its value is correct,
421    that value is used.  */
422 extern char *get_current_dir_name (void) __THROW;
423
424 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
425 /* Put the absolute pathname of the current working directory in BUF.
426    If successful, return BUF.  If not, put an error message in
427    BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */
428 extern char *getwd (char *__buf) __THROW;
429 #endif
430
431
432 /* Duplicate FD, returning a new file descriptor on the same file.  */
433 extern int dup (int __fd) __THROW;
434
435 /* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
436 extern int dup2 (int __fd, int __fd2) __THROW;
437
438 /* NULL-terminated array of "NAME=VALUE" environment variables.  */
439 extern char **__environ;
440 #ifdef __USE_GNU
441 extern char **environ;
442 #endif
443
444
445 /* Replace the current process, executing PATH with arguments ARGV and
446    environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
447 extern int execve (__const char *__path, char *__const __argv[],
448                    char *__const __envp[]) __THROW;
449
450 /* Execute PATH with arguments ARGV and environment from `environ'.  */
451 extern int execv (__const char *__path, char *__const __argv[]) __THROW;
452
453 /* Execute PATH with all arguments after PATH until a NULL pointer,
454    and the argument after that for environment.  */
455 extern int execle (__const char *__path, __const char *__arg, ...) __THROW;
456
457 /* Execute PATH with all arguments after PATH until
458    a NULL pointer and environment from `environ'.  */
459 extern int execl (__const char *__path, __const char *__arg, ...) __THROW;
460
461 /* Execute FILE, searching in the `PATH' environment variable if it contains
462    no slashes, with arguments ARGV and environment from `environ'.  */
463 extern int execvp (__const char *__file, char *__const __argv[]) __THROW;
464
465 /* Execute FILE, searching in the `PATH' environment variable if
466    it contains no slashes, with all arguments after FILE until a
467    NULL pointer and environment from `environ'.  */
468 extern int execlp (__const char *__file, __const char *__arg, ...) __THROW;
469
470
471 #if defined __USE_MISC || defined __USE_XOPEN
472 /* Add INC to priority of the current process.  */
473 extern int nice (int __inc) __THROW;
474 #endif
475
476
477 /* Terminate program execution with the low-order 8 bits of STATUS.  */
478 extern void _exit (int __status) __attribute__ ((__noreturn__));
479
480
481 /* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
482    the `_SC_*' symbols for the NAME argument to `sysconf';
483    and the `_CS_*' symbols for the NAME argument to `confstr'.  */
484 #include <bits/confname.h>
485
486 /* Get file-specific configuration information about PATH.  */
487 extern long int pathconf (__const char *__path, int __name) __THROW;
488
489 /* Get file-specific configuration about descriptor FD.  */
490 extern long int fpathconf (int __fd, int __name) __THROW;
491
492 /* Get the value of the system variable NAME.  */
493 extern long int sysconf (int __name) __THROW __attribute__ ((__const__));
494
495 #ifdef  __USE_POSIX2
496 /* Get the value of the string-valued system variable NAME.  */
497 extern size_t confstr (int __name, char *__buf, size_t __len) __THROW;
498 #endif
499
500
501 /* Get the process ID of the calling process.  */
502 extern __pid_t getpid (void) __THROW;
503
504 /* Get the process ID of the calling process's parent.  */
505 extern __pid_t getppid (void) __THROW;
506
507 /* Get the process group ID of the calling process.
508    This function is different on old BSD. */
509 #ifndef __FAVOR_BSD
510 extern __pid_t getpgrp (void) __THROW;
511 #else
512 # ifdef __REDIRECT
513 extern __pid_t __REDIRECT (getpgrp, (__pid_t __pid) __THROW, __getpgid);
514 # else
515 #  define getpgrp __getpgid
516 # endif
517 #endif
518
519 /* Get the process group ID of process PID.  */
520 extern __pid_t __getpgid (__pid_t __pid) __THROW;
521 #ifdef __USE_XOPEN_EXTENDED
522 extern __pid_t getpgid (__pid_t __pid) __THROW;
523 #endif
524
525
526 /* Set the process group ID of the process matching PID to PGID.
527    If PID is zero, the current process's process group ID is set.
528    If PGID is zero, the process ID of the process is used.  */
529 extern int setpgid (__pid_t __pid, __pid_t __pgid) __THROW;
530
531 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
532 /* Both System V and BSD have `setpgrp' functions, but with different
533    calling conventions.  The BSD function is the same as POSIX.1 `setpgid'
534    (above).  The System V function takes no arguments and puts the calling
535    process in its on group like `setpgid (0, 0)'.
536
537    New programs should always use `setpgid' instead.
538
539    The default in GNU is to provide the System V function.  The BSD
540    function is available under -D_BSD_SOURCE.  */
541
542 # ifndef __FAVOR_BSD
543
544 /* Set the process group ID of the calling process to its own PID.
545    This is exactly the same as `setpgid (0, 0)'.  */
546 extern int setpgrp (void) __THROW;
547
548 # else
549
550 /* Another name for `setpgid' (above).  */
551 #  ifdef __REDIRECT
552 extern int __REDIRECT (setpgrp, (__pid_t __pid, __pid_t __pgrp) __THROW,
553                        setpgid);
554 #  else
555 #   define setpgrp setpgid
556 #  endif
557
558 # endif /* Favor BSD.  */
559 #endif  /* Use SVID or BSD.  */
560
561 /* Create a new session with the calling process as its leader.
562    The process group IDs of the session and the calling process
563    are set to the process ID of the calling process, which is returned.  */
564 extern __pid_t setsid (void) __THROW;
565
566 #ifdef __USE_XOPEN_EXTENDED
567 /* Return the session ID of the given process.  */
568 extern __pid_t getsid (__pid_t __pid) __THROW;
569 #endif
570
571 /* Get the real user ID of the calling process.  */
572 extern __uid_t getuid (void) __THROW;
573
574 /* Get the effective user ID of the calling process.  */
575 extern __uid_t geteuid (void) __THROW;
576
577 /* Get the real group ID of the calling process.  */
578 extern __gid_t getgid (void) __THROW;
579
580 /* Get the effective group ID of the calling process.  */
581 extern __gid_t getegid (void) __THROW;
582
583 /* If SIZE is zero, return the number of supplementary groups
584    the calling process is in.  Otherwise, fill in the group IDs
585    of its supplementary groups in LIST and return the number written.  */
586 extern int getgroups (int __size, __gid_t __list[]) __THROW;
587
588 /* Set the user ID of the calling process to UID.
589    If the calling process is the super-user, set the real
590    and effective user IDs, and the saved set-user-ID to UID;
591    if not, the effective user ID is set to UID.  */
592 extern int setuid (__uid_t __uid) __THROW;
593
594 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
595 /* Set the real user ID of the calling process to RUID,
596    and the effective user ID of the calling process to EUID.  */
597 extern int setreuid (__uid_t __ruid, __uid_t __euid) __THROW;
598 #endif
599
600 #if defined __USE_BSD || defined __USE_XOPEN2K
601 /* Set the effective user ID of the calling process to UID.  */
602 extern int seteuid (__uid_t __uid) __THROW;
603 #endif /* Use BSD.  */
604
605 /* Set the group ID of the calling process to GID.
606    If the calling process is the super-user, set the real
607    and effective group IDs, and the saved set-group-ID to GID;
608    if not, the effective group ID is set to GID.  */
609 extern int setgid (__gid_t __gid) __THROW;
610
611 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
612 /* Set the real group ID of the calling process to RGID,
613    and the effective group ID of the calling process to EGID.  */
614 extern int setregid (__gid_t __rgid, __gid_t __egid) __THROW;
615 #endif
616
617 #if defined __USE_BSD || defined __USE_XOPEN2K
618 /* Set the effective group ID of the calling process to GID.  */
619 extern int setegid (__gid_t __gid) __THROW;
620 #endif /* Use BSD.  */
621
622 #ifdef __USE_GNU
623 /* Fetch the effective user ID, real user ID, and saved-set user ID,
624    of the calling process.  */
625 extern int getresuid (__uid_t *__euid, __uid_t *__ruid, __uid_t *__suid);
626
627 /* Fetch the effective group ID, real group ID, and saved-set group ID,
628    of the calling process.  */
629 extern int getresgid (__gid_t *__egid, __gid_t *__rgid, __gid_t *__sgid);
630
631 /* Set the effective user ID, real user ID, and saved-set user ID,
632    of the calling process to EUID, RUID, and SUID, respectively.  */
633 extern int setresuid (__uid_t __euid, __uid_t __ruid, __uid_t __suid);
634
635 /* Set the effective group ID, real group ID, and saved-set group ID,
636    of the calling process to EGID, RGID, and SGID, respectively.  */
637 extern int setresgid (__gid_t __egid, __gid_t __rgid, __gid_t __sgid);
638 #endif
639
640
641 /* Clone the calling process, creating an exact copy.
642    Return -1 for errors, 0 to the new process,
643    and the process ID of the new process to the old process.  */
644 extern __pid_t fork (void) __THROW;
645
646 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
647 /* Clone the calling process, but without copying the whole address space.
648    The calling process is suspended until the new process exits or is
649    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
650    and the process ID of the new process to the old process.  */
651 extern __pid_t vfork (void) __THROW;
652 #endif /* Use BSD. */
653
654
655 /* Return the pathname of the terminal FD is open on, or NULL on errors.
656    The returned storage is good only until the next call to this function.  */
657 extern char *ttyname (int __fd) __THROW;
658
659 /* Store at most BUFLEN characters of the pathname of the terminal FD is
660    open on in BUF.  Return 0 on success, otherwise an error number.  */
661 extern int ttyname_r (int __fd, char *__buf, size_t __buflen) __THROW;
662
663 /* Return 1 if FD is a valid descriptor associated
664    with a terminal, zero if not.  */
665 extern int isatty (int __fd) __THROW;
666
667 #if defined __USE_BSD \
668     || (defined __USE_XOPEN_EXTENDED && !defined __USE_UNIX98)
669 /* Return the index into the active-logins file (utmp) for
670    the controlling terminal.  */
671 extern int ttyslot (void) __THROW;
672 #endif
673
674
675 /* Make a link to FROM named TO.  */
676 extern int link (__const char *__from, __const char *__to) __THROW;
677
678 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
679 /* Make a symbolic link to FROM named TO.  */
680 extern int symlink (__const char *__from, __const char *__to) __THROW;
681
682 /* Read the contents of the symbolic link PATH into no more than
683    LEN bytes of BUF.  The contents are not null-terminated.
684    Returns the number of characters read, or -1 for errors.  */
685 extern int readlink (__const char *__restrict __path, char *__restrict __buf,
686                      size_t __len) __THROW;
687 #endif /* Use BSD.  */
688
689 /* Remove the link NAME.  */
690 extern int unlink (__const char *__name) __THROW;
691
692 /* Remove the directory PATH.  */
693 extern int rmdir (__const char *__path) __THROW;
694
695
696 /* Return the foreground process group ID of FD.  */
697 extern __pid_t tcgetpgrp (int __fd) __THROW;
698
699 /* Set the foreground process group ID of FD set PGRP_ID.  */
700 extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) __THROW;
701
702
703 /* Return the login name of the user.  */
704 extern char *getlogin (void) __THROW;
705 #if defined __USE_REENTRANT || defined __USE_UNIX98
706 /* Return at most NAME_LEN characters of the login name of the user in NAME.
707    If it cannot be determined or some other error occurred, return the error
708    code.  Otherwise return 0.  */
709 extern int getlogin_r (char *__name, size_t __name_len) __THROW;
710 #endif
711
712 #ifdef  __USE_BSD
713 /* Set the login name returned by `getlogin'.  */
714 extern int setlogin (__const char *__name) __THROW;
715 #endif
716
717
718 #ifdef  __USE_POSIX2
719 /* Get definitions and prototypes for functions to process the
720    arguments in ARGV (ARGC of them, minus the program name) for
721    options given in OPTS.  */
722 # define __need_getopt
723 # include <bits/getopt.h>
724 #endif
725
726
727 #if defined __USE_BSD || defined __USE_UNIX98
728 /* Put the name of the current host in no more than LEN bytes of NAME.
729    The result is null-terminated if LEN is large enough for the full
730    name and the terminator.  */
731 extern int gethostname (char *__name, size_t __len) __THROW;
732 #endif
733
734
735 #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_UNIX98)
736 /* Set the name of the current host to NAME, which is LEN bytes long.
737    This call is restricted to the super-user.  */
738 extern int sethostname (__const char *__name, size_t __len) __THROW;
739
740 /* Set the current machine's Internet number to ID.
741    This call is restricted to the super-user.  */
742 extern int sethostid (long int __id) __THROW;
743
744
745 /* Get and set the NIS (aka YP) domain name, if any.
746    Called just like `gethostname' and `sethostname'.
747    The NIS domain name is usually the empty string when not using NIS.  */
748 extern int getdomainname (char *__name, size_t __len) __THROW;
749 extern int setdomainname (__const char *__name, size_t __len) __THROW;
750
751
752 /* Revoke access permissions to all processes currently communicating
753    with the control terminal, and then send a SIGHUP signal to the process
754    group of the control terminal.  */
755 extern int vhangup (void) __THROW;
756
757 /* Revoke the access of all descriptors currently open on FILE.  */
758 extern int revoke (__const char *__file) __THROW;
759
760
761 /* Enable statistical profiling, writing samples of the PC into at most
762    SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
763    is enabled, the system examines the user PC and increments
764    SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536].  If SCALE is zero,
765    disable profiling.  Returns zero on success, -1 on error.  */
766 extern int profil (unsigned short int *__sample_buffer, size_t __size,
767                    size_t __offset, unsigned int __scale) __THROW;
768
769
770 /* Turn accounting on if NAME is an existing file.  The system will then write
771    a record for each process as it terminates, to this file.  If NAME is NULL,
772    turn accounting off.  This call is restricted to the super-user.  */
773 extern int acct (__const char *__name) __THROW;
774
775
776 /* Successive calls return the shells listed in `/etc/shells'.  */
777 extern char *getusershell (void) __THROW;
778 extern void endusershell (void) __THROW; /* Discard cached info.  */
779 extern void setusershell (void) __THROW; /* Rewind and re-read the file.  */
780
781
782 /* Put the program in the background, and dissociate from the controlling
783    terminal.  If NOCHDIR is zero, do `chdir ("/")'.  If NOCLOSE is zero,
784    redirects stdin, stdout, and stderr to /dev/null.  */
785 extern int daemon (int __nochdir, int __noclose) __THROW;
786 #endif /* Use BSD || X/Open.  */
787
788
789 #if defined __USE_BSD || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
790 /* Make PATH be the root directory (the starting point for absolute paths).
791    This call is restricted to the super-user.  */
792 extern int chroot (__const char *__path) __THROW;
793
794 /* Prompt with PROMPT and read a string from the terminal without echoing.
795    Uses /dev/tty if possible; otherwise stderr and stdin.  */
796 extern char *getpass (__const char *__prompt) __THROW;
797 #endif /* Use BSD || X/Open.  */
798
799
800 #if defined __USE_BSD || defined __USE_XOPEN
801 /* Make all changes done to FD actually appear on disk.  */
802 extern int fsync (int __fd) __THROW;
803 #endif /* Use BSD || X/Open.  */
804
805
806 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
807
808 /* Return the current machine's Internet number.  */
809 extern long int gethostid (void) __THROW;
810
811 /* Make all changes done to all files actually appear on disk.  */
812 extern void sync (void) __THROW;
813
814
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.  */
817 extern int getpagesize (void)  __THROW __attribute__ ((__const__));
818
819
820 /* Truncate FILE to LENGTH bytes.  */
821 # ifndef __USE_FILE_OFFSET64
822 extern int truncate (__const char *__file, __off_t __length) __THROW;
823 # else
824 #  ifdef __REDIRECT
825 extern int __REDIRECT (truncate,
826                        (__const char *__file, __off64_t __length) __THROW,
827                        truncate64);
828 #  else
829 #   define truncate truncate64
830 #  endif
831 # endif
832 # ifdef __USE_LARGEFILE64
833 extern int truncate64 (__const char *__file, __off64_t __length) __THROW;
834 # endif
835
836 /* Truncate the file FD is open on to LENGTH bytes.  */
837 # ifndef __USE_FILE_OFFSET64
838 extern int ftruncate (int __fd, __off_t __length) __THROW;
839 # else
840 #  ifdef __REDIRECT
841 extern int __REDIRECT (ftruncate, (int __fd, __off64_t __length) __THROW,
842                        ftruncate64);
843 #  else
844 #   define ftruncate ftruncate64
845 #  endif
846 # endif
847 # ifdef __USE_LARGEFILE64
848 extern int ftruncate64 (int __fd, __off64_t __length) __THROW;
849 # endif
850
851
852 /* Return the maximum number of file descriptors
853    the current process could possibly have.  */
854 extern int getdtablesize (void) __THROW;
855
856 #endif /* Use BSD || X/Open Unix.  */
857
858
859 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
860
861 /* Set the end of accessible data space (aka "the break") to ADDR.
862    Returns zero on success and -1 for errors (with errno set).  */
863 extern int brk (void *__addr) __THROW;
864
865 /* Increase or decrease the end of accessible data space by DELTA bytes.
866    If successful, returns the address the previous end of data space
867    (i.e. the beginning of the new space, if DELTA > 0);
868    returns (void *) -1 for errors (with errno set).  */
869 extern void *sbrk (intptr_t __delta) __THROW;
870 #endif
871
872
873 #ifdef __USE_MISC
874 /* Invoke `system call' number SYSNO, passing it the remaining arguments.
875    This is completely system-dependent, and not often useful.
876
877    In Unix, `syscall' sets `errno' for all errors and most calls return -1
878    for errors; in many systems you cannot pass arguments or get return
879    values for all system calls (`pipe', `fork', and `getppid' typically
880    among them).
881
882    In Mach, all system calls take normal arguments and always return an
883    error code (zero for success).  */
884 extern long int syscall (long int __sysno, ...) __THROW;
885
886 #endif  /* Use misc.  */
887
888
889 #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK
890 /* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
891    files consistent.  Some systems have them there and some here, and some
892    software depends on the macros being defined without including both.  */
893
894 /* `lockf' is a simpler interface to the locking facilities of `fcntl'.
895    LEN is always relative to the current file position.
896    The CMD argument is one of the following.  */
897
898 # define F_ULOCK 0      /* Unlock a previously locked region.  */
899 # define F_LOCK  1      /* Lock a region for exclusive use.  */
900 # define F_TLOCK 2      /* Test and lock a region for exclusive use.  */
901 # define F_TEST  3      /* Test a region for other processes locks.  */
902
903 # ifndef __USE_FILE_OFFSET64
904 extern int lockf (int __fd, int __cmd, __off_t __len) __THROW;
905 # else
906 #  ifdef __REDIRECT
907 extern int __REDIRECT (lockf, (int __fd, int __cmd, __off64_t __len) __THROW,
908                        lockf64);
909 #  else
910 #   define lockf lockf64
911 #  endif
912 # endif
913 # ifdef __USE_LARGEFILE64
914 extern int lockf64 (int __fd, int __cmd, __off64_t __len) __THROW;
915 # endif
916 #endif /* Use misc and F_LOCK not already defined.  */
917
918
919 #ifdef __USE_GNU
920
921 /* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno'
922    set to EINTR.  */
923
924 # define TEMP_FAILURE_RETRY(expression) \
925   (__extension__                                                              \
926     ({ long int __result;                                                     \
927        do __result = (long int) (expression);                                 \
928        while (__result == -1L && errno == EINTR);                             \
929        __result; }))
930 #endif
931
932 #if defined __USE_POSIX199309 || defined __USE_UNIX98
933 /* Synchronize at least the data part of a file with the underlying
934    media.  */
935 extern int fdatasync (int __fildes) __THROW;
936 #endif /* Use POSIX199309 */
937
938
939 /* XPG4.2 specifies that prototypes for the encryption functions must
940    be defined here.  */
941 #ifdef  __USE_XOPEN
942 /* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
943 extern char *crypt (__const char *__key, __const char *__salt) __THROW;
944
945 /* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
946    block in place.  */
947 extern void encrypt (char *__block, int __edflag) __THROW;
948
949
950 /* Swab pairs bytes in the first N bytes of the area pointed to by
951    FROM and copy the result to TO.  The value of TO must not be in the
952    range [FROM - N + 1, FROM - 1].  If N is odd the first byte in FROM
953    is without partner.  */
954 extern void swab (__const void *__restrict __from, void *__restrict __to,
955                   ssize_t __n) __THROW;
956 #endif
957
958
959 /* The Single Unix specification demands this prototype to be here.
960    It is also found in <stdio.h>.  */
961 #ifdef __USE_XOPEN
962 /* Return the name of the controlling terminal.  */
963 extern char *ctermid (char *__s) __THROW;
964 #endif
965
966
967 #ifdef __USE_POSIX199309
968 /* This function is only available if the system has POSIX threads.  */
969
970 /* Install handlers to be called when a new process is created with FORK.
971    The PREPARE handler is called in the parent process just before performing
972    FORK. The PARENT handler is called in the parent process just after FORK.
973    The CHILD handler is called in the child process.  Each of the three
974    handlers can be NULL, meaning that no handler needs to be called at that
975    point.
976    PTHREAD_ATFORK can be called several times, in which case the PREPARE
977    handlers are called in LIFO order (last added with PTHREAD_ATFORK,
978    first called before FORK), and the PARENT and CHILD handlers are called
979    in FIFO (first added, first called). */
980 extern int pthread_atfork (void (*__prepare) (void),
981                            void (*__parent) (void),
982                            void (*__child) (void)) __THROW;
983 #endif
984
985 __END_DECLS
986
987 #endif /* unistd.h  */