1 /* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
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.
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.
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
16 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
17 Cambridge, MA 02139, USA. */
20 * POSIX Standard: 2.10 Symbolic Constants <unistd.h>
28 /* These may be used to determine what facilities are present at compile time.
29 Their values can be obtained at run time from sysconf. */
31 /* POSIX Standard approved as IEEE Std 1003.1 as of August, 1988. */
32 #define _POSIX_VERSION 199009L
35 #define _POSIX2_C_VERSION 199912L /* Invalid until 1003.2 is done. */
37 /* If defined, the implementation supports the
38 C Language Bindings Option. */
39 #define _POSIX2_C_BIND 1
41 /* If defined, the implementation supports the
42 C Language Development Utilities Option. */
43 #define _POSIX2_C_DEV 1
45 /* If defined, the implementation supports the
46 FORTRAN Language Development Utilities Option. */
47 #define _POSIX2_FORT_DEV 1
49 /* If defined, the implementation supports the
50 Software Development Utilities Option. */
51 #define _POSIX2_SW_DEV 1
55 /* Get values of POSIX options:
57 If these symbols are defined, the corresponding features are
58 always available. If not, they may be available sometimes.
59 The current values can be obtained with `sysconf'.
61 _POSIX_JOB_CONTROL Job control is supported.
62 _POSIX_SAVED_IDS Processes have a saved set-user-ID
63 and a saved set-group-ID.
65 If any of these symbols is defined as -1, the corresponding option is not
66 true for any file. If any is defined as other than -1, the corresponding
67 option is true for all files. If a symbol is not defined at all, the value
68 for a specific file can be obtained from `pathconf' and `fpathconf'.
70 _POSIX_CHOWN_RESTRICTED Only the super user can use `chown' to change
71 the owner of a file. `chown' can only be used
72 to change the group ID of a file to a group of
73 which the calling process is a member.
74 _POSIX_NO_TRUNC Pathname components longer than
75 NAME_MAX generate an error.
76 _POSIX_VDISABLE If defined, if the value of an element of the
77 `c_cc' member of `struct termios' is
78 _POSIX_VDISABLE, no character will have the
79 effect associated with that element.
82 #include <posix_opt.h>
85 /* Standard file descriptors. */
86 #define STDIN_FILENO 0 /* Standard input. */
87 #define STDOUT_FILENO 1 /* Standard output. */
88 #define STDERR_FILENO 2 /* Standard error output. */
91 /* All functions that are not declared anywhere else. */
93 #include <gnu/types.h>
96 #define ssize_t __ssize_t
103 /* Values for the second argument to access.
104 These may be OR'd together. */
105 #define R_OK 4 /* Test for read permission. */
106 #define W_OK 2 /* Test for write permission. */
107 #define X_OK 1 /* Test for execute permission. */
108 #define F_OK 0 /* Test for existence. */
110 /* Test for access to NAME. */
111 extern int EXFUN(__access, (CONST char *__name, int __type));
112 extern int EXFUN(access, (CONST char *__name, int __type));
115 #define access(name, type) __access((name), (type))
116 #endif /* Optimizing. */
119 /* Values for the WHENCE argument to lseek. */
120 #ifndef _STDIO_H /* <stdio.h> has the same definitions. */
121 #define SEEK_SET 0 /* Seek from beginning of file. */
122 #define SEEK_CUR 1 /* Seek from current position. */
123 #define SEEK_END 2 /* Seek from end of file. */
126 /* Move FD's file position to OFFSET bytes from the
127 beginning of the file (if WHENCE is SEEK_SET),
128 the current position (if WHENCE is SEEK_CUR),
129 or the end of the file (if WHENCE is SEEK_END).
130 Return the old file position. */
131 extern __off_t EXFUN(__lseek, (int __fd, __off_t __offset, int __whence));
132 extern __off_t EXFUN(lseek, (int __fd, __off_t __offset, int __whence));
134 /* Close the file descriptor FD. */
135 extern int EXFUN(__close, (int __fd));
136 extern int EXFUN(close, (int __fd));
138 /* Read NBYTES into BUF from FD. Return the
139 number read, -1 for errors or 0 for EOF. */
140 extern ssize_t EXFUN(__read, (int __fd, PTR __buf, size_t __nbytes));
141 extern ssize_t EXFUN(read, (int __fd, PTR __buf, size_t __nbytes));
143 /* Write N bytes of BUF to FD. Return the number written, or -1. */
144 extern ssize_t EXFUN(__write, (int __fd, CONST PTR __buf, size_t __n));
145 extern ssize_t EXFUN(write, (int __fd, CONST PTR __buf, size_t __n));
148 #define lseek(fd, offset, whence) __lseek((fd), (offset), (whence))
149 #define close(fd) __close(fd)
150 #define read(fd, buf, n) __read((fd), (buf), (n))
151 #define write(fd, buf, n) __write((fd), (buf), (n))
152 #endif /* Optimizing. */
155 /* Create a one-way communication channel (pipe).
156 If successul, two file descriptors are stored in PIPEDES;
157 bytes written on PIPEDES[1] can be read from PIPEDES[0].
158 Returns 0 if successful, -1 if not. */
159 extern int EXFUN(__pipe, (int __pipedes[2]));
160 extern int EXFUN(pipe, (int __pipedes[2]));
163 #define pipe(pipedes) __pipe(pipedes)
164 #endif /* Optimizing. */
166 /* Schedule an alarm. In SECONDS seconds, the process will get a SIGALRM.
167 If SECONDS is zero, any currently scheduled alarm will be cancelled.
168 The function returns the number of seconds remaining until the last
169 alarm scheduled would have signaled, or zero if there wasn't one.
170 There is no return value to indicate an error, but you can set `errno'
171 to 0 and check its value after calling `alarm', and this might tell you.
172 The signal may come late due to processor scheduling. */
173 extern unsigned int EXFUN(alarm, (unsigned int __seconds));
175 /* Make the process sleep for SECONDS seconds, or until a signal arrives
176 and is not ignored. The function returns the number of seconds less
177 than SECONDS which it actually slept (thus zero if it slept the full time).
178 If a signal handler does a `longjmp' or modifies the handling of the
179 SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
180 signal afterwards is undefined. There is no return value to indicate
181 error, but if `sleep' returns SECONDS, it probably didn't work. */
182 extern unsigned int EXFUN(sleep, (unsigned int __seconds));
185 /* Suspend the process until a signal arrives.
186 This always returns -1 and sets `errno' to EINTR. */
187 extern int EXFUN(pause, (NOARGS));
190 /* Change the owner and group of FILE. */
191 extern int EXFUN(__chown, (CONST char *__file AND
192 __uid_t __owner AND __gid_t __group));
193 extern int EXFUN(chown, (CONST char *__file AND
194 __uid_t __owner AND __gid_t __group));
197 #define chown(file, owner, group) __chown((file), (owner), (group))
198 #endif /* Optimizing. */
201 /* Change the owner and group of the file that FD is open on. */
202 extern int EXFUN(__fchown, (int __fd AND
203 __uid_t __owner AND __gid_t __group));
204 extern int EXFUN(fchown, (int __fd AND
205 __uid_t __owner AND __gid_t __group));
207 #define fchown(fd, owner, group) __fchown((fd), (owner), (group))
208 #endif /* Optimizing. */
209 #endif /* Use BSD. */
211 /* Change the process's working directory to PATH. */
212 extern int EXFUN(__chdir, (CONST char *__path));
213 extern int EXFUN(chdir, (CONST char *__path));
216 #define chdir(path) __chdir(path)
217 #endif /* Optimizing. */
219 /* Get the pathname of the current working directory,
220 and put it in SIZE bytes of BUF. Returns NULL if the
221 directory couldn't be determined or SIZE was too small.
222 If successful, returns BUF. In GNU, if BUF is NULL,
223 an array is allocated with `malloc'; the array is SIZE
224 bytes long, unless SIZE <= 0, in which case it is as
226 extern char *EXFUN(getcwd, (char *__buf, size_t __size));
229 /* Return a malloc'd string containing the current directory name.
230 If the environment variable `PWD' is set, and its value is correct,
231 that value is used. */
232 extern char *EXFUN(get_current_dir_name, (NOARGS));
236 /* Put the absolute pathname of the current working directory in BUF.
237 If successful, return BUF. If not, put an error message in
238 BUF and return NULL. BUF should be at least PATH_MAX bytes long. */
239 extern char *EXFUN(getwd, (char *__buf));
243 /* Duplicate FD, returning a new file descriptor on the same file. */
244 extern int EXFUN(__dup, (int __fd));
245 extern int EXFUN(dup, (int __fd));
248 #define dup(fd) __dup(fd)
249 #endif /* Optimizing. */
251 /* Duplicate FD to FD2, closing FD2 and making it open on the same file. */
252 extern int EXFUN(__dup2, (int __fd, int __fd2));
253 extern int EXFUN(dup2, (int __fd, int __fd2));
256 #define dup2(fd, fd2) __dup2((fd), (fd2))
257 #endif /* Optimizing. */
259 /* NULL-terminated array of "NAME=VALUE" environment variables. */
260 extern char **__environ;
261 extern char **environ;
264 /* Replace the current process, executing PATH with arguments ARGV and
265 environment ENVP. ARGV and ENVP are terminated by NULL pointers. */
266 extern int EXFUN(__execve, (CONST char *__path, char *CONST __argv[],
267 char *CONST __envp[]));
268 extern int EXFUN(execve, (CONST char *__path, char *CONST __argv[],
269 char *CONST __envp[]));
271 #define execve __execve
273 /* Execute PATH with arguments ARGV and environment from `environ'. */
274 extern int EXFUN(execv, (CONST char *__path, char *CONST __argv[]));
276 /* Execute PATH with all arguments after PATH until a NULL pointer,
277 and the argument after that for environment. */
278 extern int EXFUN(execle, (CONST char *__path, CONST char *__arg, ...));
280 /* Execute PATH with all arguments after PATH until
281 a NULL pointer and environment from `environ'. */
282 extern int EXFUN(execl, (CONST char *__path, CONST char *__arg, ...));
284 /* Execute FILE, searching in the `PATH' environment variable if it contains
285 no slashes, with arguments ARGV and environment from `environ'. */
286 extern int EXFUN(execvp, (CONST char *__file, char *CONST __argv[]));
288 /* Execute FILE, searching in the `PATH' environment variable if
289 it contains no slashes, with all arguments after FILE until a
290 NULL pointer and environment from `environ'. */
291 extern int EXFUN(execlp, (CONST char *__file, CONST char *arg, ...));
296 /* The `volatile' keyword tells GCC that a function never returns. */
297 #define __NORETURN __volatile
301 #endif /* __NORETURN not defined. */
303 /* Terminate program execution with the low-order 8 bits of STATUS. */
304 extern __NORETURN void EXFUN(_exit, (int __status));
307 /* Values for the NAME argument to `pathconf' and `fpathconf'.
308 These correspond to the _POSIX_* symbols above, but for
309 specific files or file descriptors. */
310 #define _PC_LINK_MAX 0
311 #define _PC_MAX_CANON 1
312 #define _PC_MAX_INPUT 2
313 #define _PC_NAME_MAX 3
314 #define _PC_PATH_MAX 4
315 #define _PC_PIPE_BUF 5
316 #define _PC_CHOWN_RESTRICTED 6
317 #define _PC_NO_TRUNC 7
318 #define _PC_VDISABLE 8
320 /* Get file-specific configuration information about PATH. */
321 extern long int EXFUN(__pathconf, (CONST char *__path, int __name));
322 extern long int EXFUN(pathconf, (CONST char *__path, int __name));
324 /* Get file-specific configuration about descriptor FD. */
325 extern long int EXFUN(__fpathconf, (int __fd, int __name));
326 extern long int EXFUN(fpathconf, (int __fd, int __name));
328 #define pathconf __pathconf
329 #define fpathconf __fpathconf
332 /* Values for the argument to `sysconf'.
333 These correspond to the _POSIX_* symbols in <posix_limits.h> and above,
334 but may vary at run time. */
348 /* Values for the argument to `sysconf'
349 corresponding to _POSIX2_* symbols. */
367 /* Get the value of the system variable NAME. */
368 extern long int EXFUN(__sysconf, (int __name));
369 extern long int EXFUN(sysconf, (int __name));
372 #define sysconf(name) __sysconf(name)
373 #endif /* Optimizing. */
377 /* Values for the argument to `confstr'. */
378 #define _CS_PATH 0 /* The default search path. */
380 /* Get the value of the string-valued system variable NAME. */
381 extern size_t EXFUN(confstr, (int __name, char *__buf, size_t __len));
385 /* Get the process ID of the calling process. */
386 extern __pid_t EXFUN(__getpid, (NOARGS));
387 extern __pid_t EXFUN(getpid, (NOARGS));
389 /* Get the process ID of the calling process's parent. */
390 extern __pid_t EXFUN(__getppid, (NOARGS));
391 extern __pid_t EXFUN(getppid, (NOARGS));
394 #define getpid() __getpid()
395 #define getppid() __getppid()
396 #endif /* Optimizing. */
398 /* Get the process group ID of process PID. */
399 extern __pid_t EXFUN(__getpgrp, (__pid_t __pid));
402 /* Get the process group ID of the calling process. */
403 extern __pid_t EXFUN(getpgrp, (NOARGS));
404 #else /* Favor BSD. */
405 #define getpgrp(pid) __getpgrp(pid)
408 /* Set the process group ID of the process matching PID to PGID.
409 If PID is zero, the current process's process group ID is set.
410 If PGID is zero, the process ID of the process is used. */
411 extern int EXFUN(__setpgrp, (__pid_t __pid, __pid_t __pgid));
412 extern int EXFUN(setpgid, (__pid_t __pid, __pid_t __pgid));
415 #define setpgid(pid, pgid) __setpgrp((pid), (pgid))
416 #endif /* Optimizing. */
419 /* Set the process group of PID to PGRP. */
420 extern int EXFUN(setpgrp, (__pid_t __pid, __pid_t __pgrp));
423 #define setpgrp(pid, pgrp) setpgid((pid), (pgrp))
424 #endif /* Optimizing. */
425 #endif /* Use BSD. */
427 /* Create a new session with the calling process as its leader.
428 The process group IDs of the session and the calling process
429 are set to the process ID of the calling process, which is returned. */
430 extern __pid_t EXFUN(__setsid, (NOARGS));
431 extern __pid_t EXFUN(setsid, (NOARGS));
434 #define setsid() __setsid()
435 #endif /* Optimizing. */
437 /* Get the real user ID of the calling process. */
438 extern __uid_t EXFUN(__getuid, (NOARGS));
439 extern __uid_t EXFUN(getuid, (NOARGS));
442 #define getuid() __getuid()
443 #endif /* Optimizing. */
445 /* Get the effective user ID of the calling process. */
446 extern __uid_t EXFUN(__geteuid, (NOARGS));
447 extern __uid_t EXFUN(geteuid, (NOARGS));
450 #define geteuid() __geteuid()
451 #endif /* Optimizing. */
453 /* Get the real group ID of the calling process. */
454 extern __gid_t EXFUN(__getgid, (NOARGS));
455 extern __gid_t EXFUN(getgid, (NOARGS));
458 #define getgid() __getgid()
459 #endif /* Optimizing. */
461 /* Get the effective group ID of the calling process. */
462 extern __gid_t EXFUN(__getegid, (NOARGS));
463 extern __gid_t EXFUN(getegid, (NOARGS));
466 #define getegid() __getegid()
467 #endif /* Optimizing. */
469 /* If SIZE is zero, return the number of supplementary groups
470 the calling process is in. Otherwise, fill in the group IDs
471 of its supplementary groups in LIST and return the number written. */
472 extern int EXFUN(__getgroups, (int __size, __gid_t __list[]));
473 extern int EXFUN(getgroups, (int __size, __gid_t __list[]));
476 #define getgroups(size, list) __getgroups((size), (list))
477 #endif /* Optimizing. */
479 /* Set the user ID of the calling process to UID.
480 If the calling process is the super-user, set the real
481 and effective user IDs, and the saved set-user-ID to UID;
482 if not, the effective user ID is set to UID. */
483 extern int EXFUN(__setuid, (__uid_t __uid));
484 extern int EXFUN(setuid, (__uid_t __uid));
487 #define setuid(uid) __setuid(uid)
488 #endif /* Optimizing. */
491 /* Set the real user ID of the calling process to RUID,
492 and the effective user ID of the calling process to EUID. */
493 extern int EXFUN(__setreuid, (__uid_t __ruid, __uid_t __euid));
494 extern int EXFUN(setreuid, (__uid_t __ruid, __uid_t __euid));
497 #define setreuid(ruid, euid) __setreuid((ruid), (euid))
498 #endif /* Optimizing. */
499 #endif /* Use BSD. */
501 /* Set the group ID of the calling process to GID.
502 If the calling process is the super-user, set the real
503 and effective group IDs, and the saved set-group-ID to GID;
504 if not, the effective group ID is set to GID. */
505 extern int EXFUN(__setgid, (__gid_t __gid));
506 extern int EXFUN(setgid, (__gid_t __gid));
509 #define setgid(gid) __setgid(gid)
510 #endif /* Optimizing. */
513 /* Set the real group ID of the calling process to RGID,
514 and the effective group ID of the calling process to EGID. */
515 extern int EXFUN(__setregid, (int __rgid, int __egid));
516 extern int EXFUN(setregid, (int __rgid, int __egid));
519 #define setregid(rgid, egid) __setregid((rgid), (egid))
520 #endif /* Optimizing. */
521 #endif /* Use BSD. */
524 /* Clone the calling process, creating an exact copy.
525 Return -1 for errors, 0 to the new process,
526 and the process ID of the new process to the old process. */
527 extern __pid_t EXFUN(__fork, (NOARGS));
528 extern __pid_t EXFUN(fork, (NOARGS));
533 /* Clone the calling process, but without copying the whole address space.
534 The the calling process is suspended until the the new process exits or is
535 replaced by a call to `execve'. Return -1 for errors, 0 to the new process,
536 and the process ID of the new process to the old process. */
537 extern __pid_t EXFUN(__vfork, (NOARGS));
538 extern __pid_t EXFUN(vfork, (NOARGS));
540 #define vfork __vfork
541 #endif /* Use BSD. */
544 /* Return the pathname of the terminal FD is open on, or NULL on errors.
545 The returned storage is good only until the next call to this function. */
546 extern char *EXFUN(ttyname, (int __fd));
548 /* Return 1 if FD is a valid descriptor associated
549 with a terminal, zero if not. */
550 extern int EXFUN(__isatty, (int __fd));
551 extern int EXFUN(isatty, (int __fd));
554 #define isatty(fd) __isatty(fd)
555 #endif /* Optimizing. */
558 /* Make a link to FROM named TO. */
559 extern int EXFUN(__link, (CONST char *__from, CONST char *__to));
560 extern int EXFUN(link, (CONST char *__from, CONST char *__to));
564 /* Make a symbolic link to FROM named TO. */
565 extern int EXFUN(__symlink, (CONST char *__from, CONST char *__to));
566 extern int EXFUN(symlink, (CONST char *__from, CONST char *__to));
569 #define symlink(from, to) __symlink((from), (to))
570 #endif /* Optimizing. */
572 /* Read the contents of the symbolic link PATH into no more than
573 LEN bytes of BUF. The contents are not null-terminated.
574 Returns the number of characters read, or -1 for errors. */
575 extern int EXFUN(__readlink, (CONST char *__path, char *__buf, size_t __len));
576 extern int EXFUN(readlink, (CONST char *__path, char *__buf, size_t __len));
579 #define readlink(path, buf, len) __readlink((path), (buf), (len))
580 #endif /* Optimizing. */
581 #endif /* Use BSD. */
583 /* Remove the link NAME. */
584 extern int EXFUN(__unlink, (CONST char *__name));
585 extern int EXFUN(unlink, (CONST char *__name));
588 #define unlink(name) __unlink(name)
589 #endif /* Optimizing. */
591 /* Remove the directory PATH. */
592 extern int EXFUN(__rmdir, (CONST char *__path));
593 extern int EXFUN(rmdir, (CONST char *__path));
596 #define rmdir(path) __rmdir(path)
597 #endif /* Optimizing. */
600 /* Return the foreground process group ID of FD. */
601 extern __pid_t EXFUN(tcgetpgrp, (int __fd));
603 /* Set the foreground process group ID of FD set PGRP_ID. */
604 extern int EXFUN(tcsetpgrp, (int __fd, __pid_t __pgrp_id));
607 /* Return the login name of the user. */
608 extern char *EXFUN(getlogin, (NOARGS));
611 /* Set the login name returned by `getlogin'. */
612 extern int EXFUN(setlogin, (CONST char *__name));
617 /* Process the arguments in ARGV (ARGC of them, minus
618 the program name) for options given in OPTS.
620 If `opterr' is zero, no messages are generated
621 for invalid options; it defaults to 1.
622 `optind' is the current index into ARGV.
623 `optarg' is the argument corresponding to the current option.
624 Return the option character from OPTS just read.
625 Return -1 when there are no more options.
626 For unrecognized options, or options missing arguments,
627 `optopt' is set to the option letter, and '?' is returned.
629 The OPTS string is a list of characters which are recognized option
630 letters, optionally followed by colons, specifying that that letter
631 takes an argument, to be placed in `optarg'.
633 If a letter in OPTS is followed by two colons, its argument is optional.
634 This behavior is specific to the GNU `getopt'.
636 The argument `--' causes premature termination of argument scanning,
637 explicitly telling `getopt' that there are no more options.
639 If OPTS begins with `--', then non-option arguments
640 are treated as arguments to the option '\0'.
641 This behavior is specific to the GNU `getopt'. */
642 extern int EXFUN(getopt, (int __argc, char *CONST *__argv,
643 CONST char *__opts));
652 /* Put the name of the current host in no more than LEN bytes of NAME.
653 The result is null-terminated if LEN is large enough for the full
654 name and the terminator. */
655 extern int EXFUN(__gethostname, (char *__name, size_t __len));
656 extern int EXFUN(gethostname, (char *__name, size_t __len));
659 #define gethostname(name, len) __gethostname((name), (len))
662 /* Set the name of the current host to NAME, which is LEN bytes long.
663 This call is restricted to the super-user. */
664 extern int EXFUN(sethostname, (CONST char *__name, size_t __len));
666 /* Return the current machine's Internet number. */
667 extern long int EXFUN(gethostid, (NOARGS));
669 /* Set the current machine's Internet number to ID.
670 This call is restricted to the super-user. */
671 extern int EXFUN(sethostid, (long int __id));
674 /* Return the number of bytes in a page. This is the system's page size,
675 which is not necessarily the same as the hardware page size. */
676 extern size_t EXFUN(__getpagesize, (NOARGS));
677 extern size_t EXFUN(getpagesize, (NOARGS));
680 #define getpagesize() __getpagesize()
681 #endif /* Optimizing. */
684 /* Return the maximum number of file descriptors
685 the current process could possibly have. */
686 extern int EXFUN(__getdtablesize, (NOARGS));
687 extern int EXFUN(getdtablesize, (NOARGS));
690 #define getdtablesize() __getdtablesize()
694 /* Make all changes done to FD actually appear on disk. */
695 extern int EXFUN(fsync, (int __fd));
697 /* Make all changes done to all files actually appear on disk. */
698 extern int EXFUN(sync, (NOARGS));
701 /* Revoke access permissions to all processes currently communicating
702 with the control terminal, and then send a SIGHUP signal to the process
703 group of the control terminal. */
704 extern int EXFUN(vhangup, (NOARGS));
707 /* Turn accounting on if NAME is an existing file. The system will then write
708 a record for each process as it terminates, to this file. If NAME is NULL,
709 turn accounting off. This call is restricted to the super-user. */
710 extern int EXFUN(acct, (CONST char *__name));
712 /* Make PATH be the root directory (the starting point for absolute paths).
713 This call is restricted to the super-user. */
714 extern int EXFUN(chroot, (CONST char *__path));
716 /* Make the block special device PATH available to the system for swapping.
717 This call is restricted to the super-user. */
718 extern int EXFUN(swapon, (CONST char *__path));
719 #endif /* Use BSD. */
722 #endif /* unistd.h */