Add prototype for __setpgid and __profil.
[kopensolaris-gnu/glibc.git] / posix / unistd.h
1 /* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 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.
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    Library General Public License for more details.
13
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.  */
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 /* If defined, the implementation supports the
44    C Language Bindings Option.  */
45 #define _POSIX2_C_BIND  1
46
47 /* If defined, the implementation supports the
48    C Language Development Utilities Option.  */
49 #define _POSIX2_C_DEV   1
50
51 /* If defined, the implementation supports the
52    Software Development Utilities Option.  */
53 #define _POSIX2_SW_DEV  1
54
55 /* If defined, the implementation supports the
56    creation of locales with the localedef utility.  */
57 #define _POSIX2_LOCALEDEF       1
58
59 /* Library conforms to X/Open version 4.  */
60 #define _XOPEN_VERSION  4
61
62 /* Commands and utilities from XPG4 are available.  */
63 #define _XOPEN_XCU_VERSION      4
64
65 /* We are compatible with the old published standards as well.  */
66 #define _XOPEN_XPG2     1
67 #define _XOPEN_XPG3     1
68 #define _XOPEN_XPG4     1
69
70 /* The X/Open Unix extensions are available.  */
71 #define _XOPEN_UNIX     1
72
73 /* Encryption is present.  */
74 #define _XOPEN_CRYPT    1
75
76 /* The enhanced internationalization capabilities according to XPG4.2
77    are present.  */
78 #define _XOPEN_ENH_I18N 1
79
80
81 /* Get values of POSIX options:
82
83    If these symbols are defined, the corresponding features are
84    always available.  If not, they may be available sometimes.
85    The current values can be obtained with `sysconf'.
86
87    _POSIX_JOB_CONTROL           Job control is supported.
88    _POSIX_SAVED_IDS             Processes have a saved set-user-ID
89                                 and a saved set-group-ID.
90    _POSIX_REALTIME_SIGNALS      Real-time, queued signals are supported.
91    _POSIX_PRIORITY_SCHEDULING   Priority scheduling is supported.
92    _POSIX_TIMERS                POSIX.4 clocks and timers are supported.
93    _POSIX_ASYNCHRONOUS_IO       Asynchronous I/O is supported.
94    _POSIX_PRIORITIZED_IO        Prioritized asynchronous I/O is supported.
95    _POSIX_SYNCHRONIZED_IO       Synchronizing file data is supported.
96    _POSIX_FSYNC                 The fsync function is present.
97    _POSIX_MAPPED_FILES          Mapping of files to memory is supported.
98    _POSIX_MEMLOCK               Locking of all memory is supported.
99    _POSIX_MEMLOCK_RANGE         Locking of ranges of memory is supported.
100    _POSIX_MEMORY_PROTECTION     Setting of memory protections is supported.
101    _POSIX_MESSAGE_PASSING       POSIX.4 message queues are supported.
102    _POSIX_SEMAPHORES            POSIX.4 counting semaphores are supported.
103    _POSIX_SHARED_MEMORY_OBJECTS POSIX.4 shared memory objects are supported.
104    _POSIX_PII                   Protocol-independent interfaces are supported.
105    _POSIX_PII_XTI               XTI protocol-indep. interfaces are supported.
106    _POSIX_PII_SOCKET            Socket protocol-indep. interfaces are supported.
107    _POSIX_PII_INTERNET          Internet family of protocols supported.
108    _POSIX_PII_INTERNET_STREAM   Connection-mode Internet protocol supported.
109    _POSIX_PII_INTERNET_DGRAM    Connectionless Internet protocol supported.
110    _POSIX_PII_OSI               ISO/OSI family of protocols supported.
111    _POSIX_PII_OSI_COTS          Connection-mode ISO/OSI service supported.
112    _POSIX_PII_OSI_CLTS          Connectionless ISO/OSI service supported.
113    _POSIX_POLL                  Implementation supports `poll' function.
114    _POSIX_SELECT                Implementation supports `select' and `pselect'.
115
116    _XOPEN_SHM                   Shared memory interface according to XPG4.2.
117
118    If any of these symbols is defined as -1, the corresponding option is not
119    true for any file.  If any is defined as other than -1, the corresponding
120    option is true for all files.  If a symbol is not defined at all, the value
121    for a specific file can be obtained from `pathconf' and `fpathconf'.
122
123    _POSIX_CHOWN_RESTRICTED      Only the super user can use `chown' to change
124                                 the owner of a file.  `chown' can only be used
125                                 to change the group ID of a file to a group of
126                                 which the calling process is a member.
127    _POSIX_NO_TRUNC              Pathname components longer than
128                                 NAME_MAX generate an error.
129    _POSIX_VDISABLE              If defined, if the value of an element of the
130                                 `c_cc' member of `struct termios' is
131                                 _POSIX_VDISABLE, no character will have the
132                                 effect associated with that element.
133    _POSIX_SYNC_IO               Synchronous I/O may be performed.
134    _POSIX_ASYNC_IO              Asynchronous I/O may be performed.
135    _POSIX_PRIO_IO               Prioritized Asynchronous I/O may be performed.
136    */
137
138 #include <bits/posix_opt.h>
139
140
141 /* Standard file descriptors.  */
142 #define STDIN_FILENO    0       /* Standard input.  */
143 #define STDOUT_FILENO   1       /* Standard output.  */
144 #define STDERR_FILENO   2       /* Standard error output.  */
145
146
147 /* All functions that are not declared anywhere else.  */
148
149 #include <bits/types.h>
150
151 #ifndef ssize_t
152 typedef __ssize_t ssize_t;
153 #define ssize_t ssize_t
154 #endif
155
156 #define __need_size_t
157 #define __need_NULL
158 #include <stddef.h>
159
160
161 /* Values for the second argument to access.
162    These may be OR'd together.  */
163 #define R_OK    4               /* Test for read permission.  */
164 #define W_OK    2               /* Test for write permission.  */
165 #define X_OK    1               /* Test for execute permission.  */
166 #define F_OK    0               /* Test for existence.  */
167
168 /* Test for access to NAME using the real UID and real GID.  */
169 extern int __access __P ((__const char *__name, int __type));
170 extern int access __P ((__const char *__name, int __type));
171
172 #ifdef __USE_GNU
173 /* Test for access to NAME using the effective UID and GID
174    (as normal file operations use).  */
175 extern int __euidaccess __P ((__const char *__name, int __type));
176 extern int euidaccess __P ((__const char *__name, int __type));
177 #endif
178
179
180 /* Values for the WHENCE argument to lseek.  */
181 #ifndef _STDIO_H                /* <stdio.h> has the same definitions.  */
182 #define SEEK_SET        0       /* Seek from beginning of file.  */
183 #define SEEK_CUR        1       /* Seek from current position.  */
184 #define SEEK_END        2       /* Seek from end of file.  */
185 #endif
186
187 #if defined __USE_BSD && !defined L_SET
188 /* Old BSD names for the same constants; just for compatibility.  */
189 #define L_SET           SEEK_SET
190 #define L_INCR          SEEK_CUR
191 #define L_XTND          SEEK_END
192 #endif
193
194
195 /* Move FD's file position to OFFSET bytes from the
196    beginning of the file (if WHENCE is SEEK_SET),
197    the current position (if WHENCE is SEEK_CUR),
198    or the end of the file (if WHENCE is SEEK_END).
199    Return the new file position.  */
200 extern __off_t __lseek __P ((int __fd, __off_t __offset, int __whence));
201 extern __off_t lseek __P ((int __fd, __off_t __offset, int __whence));
202
203 /* Close the file descriptor FD.  */
204 extern int __close __P ((int __fd));
205 extern int close __P ((int __fd));
206
207 /* Read NBYTES into BUF from FD.  Return the
208    number read, -1 for errors or 0 for EOF.  */
209 extern ssize_t __read __P ((int __fd, __ptr_t __buf, size_t __nbytes));
210 extern ssize_t read __P ((int __fd, __ptr_t __buf, size_t __nbytes));
211
212 /* Write N bytes of BUF to FD.  Return the number written, or -1.  */
213 extern ssize_t __write __P ((int __fd, __const __ptr_t __buf, size_t __n));
214 extern ssize_t write __P ((int __fd, __const __ptr_t __buf, size_t __n));
215
216
217 /* Create a one-way communication channel (pipe).
218    If successful, two file descriptors are stored in PIPEDES;
219    bytes written on PIPEDES[1] can be read from PIPEDES[0].
220    Returns 0 if successful, -1 if not.  */
221 extern int __pipe __P ((int __pipedes[2]));
222 extern int pipe __P ((int __pipedes[2]));
223
224 /* Schedule an alarm.  In SECONDS seconds, the process will get a SIGALRM.
225    If SECONDS is zero, any currently scheduled alarm will be cancelled.
226    The function returns the number of seconds remaining until the last
227    alarm scheduled would have signaled, or zero if there wasn't one.
228    There is no return value to indicate an error, but you can set `errno'
229    to 0 and check its value after calling `alarm', and this might tell you.
230    The signal may come late due to processor scheduling.  */
231 extern unsigned int alarm __P ((unsigned int __seconds));
232
233 /* Make the process sleep for SECONDS seconds, or until a signal arrives
234    and is not ignored.  The function returns the number of seconds less
235    than SECONDS which it actually slept (thus zero if it slept the full time).
236    If a signal handler does a `longjmp' or modifies the handling of the
237    SIGALRM signal while inside `sleep' call, the handling of the SIGALRM
238    signal afterwards is undefined.  There is no return value to indicate
239    error, but if `sleep' returns SECONDS, it probably didn't work.  */
240 extern unsigned int __sleep __P ((unsigned int __seconds));
241 extern unsigned int sleep __P ((unsigned int __seconds));
242
243 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
244 /* Set an alarm to go off (generating a SIGALRM signal) in VALUE
245    microseconds.  If INTERVAL is nonzero, when the alarm goes off, the
246    timer is reset to go off every INTERVAL microseconds thereafter.
247    Returns the number of microseconds remaining before the alarm.  */
248 extern unsigned int ualarm __P ((unsigned int __value,
249                                  unsigned int __interval));
250
251 /* Sleep USECONDS microseconds, or until a signal arrives that is not blocked
252    or ignored.  */
253 extern void usleep __P ((unsigned int __useconds));
254 #endif
255
256
257 /* Suspend the process until a signal arrives.
258    This always returns -1 and sets `errno' to EINTR.  */
259 extern int pause __P ((void));
260
261
262 /* Change the owner and group of FILE.  */
263 extern int __chown __P ((__const char *__file,
264                          __uid_t __owner, __gid_t __group));
265 extern int chown __P ((__const char *__file,
266                        __uid_t __owner, __gid_t __group));
267
268 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
269 /* Change the owner and group of the file that FD is open on.  */
270 extern int __fchown __P ((int __fd,
271                           __uid_t __owner, __gid_t __group));
272 extern int fchown __P ((int __fd,
273                         __uid_t __owner, __gid_t __group));
274
275
276 /* Change owner and group of FILE, if it is a symbolic
277    link the ownership of the symbolic link is changed.  */
278 extern int __lchown __P ((__const char *__file, __uid_t __owner,
279                           __gid_t __group));
280 extern int lchown __P ((__const char *__file, __uid_t __owner,
281                         __gid_t __group));
282
283 #endif /* Use BSD || X/Open Unix.  */
284
285 /* Change the process's working directory to PATH.  */
286 extern int __chdir __P ((__const char *__path));
287 extern int chdir __P ((__const char *__path));
288
289 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
290 /* Change the process's working directory to the one FD is open on.  */
291 extern int __fchdir __P ((int __fd));
292 extern int fchdir __P ((int __fd));
293 #endif
294
295 /* Get the pathname of the current working directory,
296    and put it in SIZE bytes of BUF.  Returns NULL if the
297    directory couldn't be determined or SIZE was too small.
298    If successful, returns BUF.  In GNU, if BUF is NULL,
299    an array is allocated with `malloc'; the array is SIZE
300    bytes long, unless SIZE == 0, in which case it is as
301    big as necessary.  */
302 extern char *__getcwd __P ((char *__buf, size_t __size));
303 extern char *getcwd __P ((char *__buf, size_t __size));
304
305 #ifdef  __USE_GNU
306 /* Return a malloc'd string containing the current directory name.
307    If the environment variable `PWD' is set, and its value is correct,
308    that value is used.  */
309 extern char *get_current_dir_name __P ((void));
310
311 /* Get the canonical absolute name of the named directory, and put it in SIZE
312    bytes of BUF.  Returns NULL if the directory couldn't be determined or
313    SIZE was too small.  If successful, returns BUF.  In GNU, if BUF is
314    NULL, an array is allocated with `malloc'; the array is SIZE bytes long,
315    unless SIZE <= 0, in which case it is as big as necessary.  */
316
317 char *__canonicalize_directory_name_internal __P ((__const char *__thisdir,
318                                                    char *__buf,
319                                                    size_t __size));
320 #endif
321
322 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
323 /* Put the absolute pathname of the current working directory in BUF.
324    If successful, return BUF.  If not, put an error message in
325    BUF and return NULL.  BUF should be at least PATH_MAX bytes long.  */
326 extern char *getwd __P ((char *__buf));
327 #endif
328
329
330 /* Duplicate FD, returning a new file descriptor on the same file.  */
331 extern int __dup __P ((int __fd));
332 extern int dup __P ((int __fd));
333
334 /* Duplicate FD to FD2, closing FD2 and making it open on the same file.  */
335 extern int __dup2 __P ((int __fd, int __fd2));
336 extern int dup2 __P ((int __fd, int __fd2));
337
338 /* NULL-terminated array of "NAME=VALUE" environment variables.  */
339 extern char **__environ;
340 #ifdef __USE_GNU
341 extern char **environ;
342 #endif
343
344
345 /* Replace the current process, executing PATH with arguments ARGV and
346    environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
347 extern int __execve __P ((__const char *__path, char *__const __argv[],
348                           char *__const __envp[]));
349 extern int execve __P ((__const char *__path, char *__const __argv[],
350                         char *__const __envp[]));
351
352 #ifdef __USE_GNU
353 /* Execute the file FD refers to, overlaying the running program image.
354    ARGV and ENVP are passed to the new program, as for `execve'.  */
355 extern int fexecve __P ((int __fd,
356                          char *__const __argv[], char *__const __envp[]));
357
358 #endif
359
360
361 /* Execute PATH with arguments ARGV and environment from `environ'.  */
362 extern int execv __P ((__const char *__path, char *__const __argv[]));
363
364 /* Execute PATH with all arguments after PATH until a NULL pointer,
365    and the argument after that for environment.  */
366 extern int execle __P ((__const char *__path, __const char *__arg, ...));
367
368 /* Execute PATH with all arguments after PATH until
369    a NULL pointer and environment from `environ'.  */
370 extern int execl __P ((__const char *__path, __const char *__arg, ...));
371
372 /* Execute FILE, searching in the `PATH' environment variable if it contains
373    no slashes, with arguments ARGV and environment from `environ'.  */
374 extern int execvp __P ((__const char *__file, char *__const __argv[]));
375
376 /* Execute FILE, searching in the `PATH' environment variable if
377    it contains no slashes, with all arguments after FILE until a
378    NULL pointer and environment from `environ'.  */
379 extern int execlp __P ((__const char *__file, __const char *__arg, ...));
380
381
382 #if defined __USE_MISC || defined __USE_XOPEN
383 /* Add INC to priority of the current process.  */
384 extern int nice __P ((int __inc));
385 #endif
386
387
388 /* Terminate program execution with the low-order 8 bits of STATUS.  */
389 extern void _exit __P ((int __status)) __attribute__ ((__noreturn__));
390
391
392 /* Get the `_PC_*' symbols for the NAME argument to `pathconf' and `fpathconf';
393    the `_SC_*' symbols for the NAME argument to `sysconf';
394    and the `_CS_*' symbols for the NAME argument to `confstr'.  */
395 #include <bits/confname.h>
396
397 /* Get file-specific configuration information about PATH.  */
398 extern long int __pathconf __P ((__const char *__path, int __name));
399 extern long int pathconf __P ((__const char *__path, int __name));
400
401 /* Get file-specific configuration about descriptor FD.  */
402 extern long int __fpathconf __P ((int __fd, int __name));
403 extern long int fpathconf __P ((int __fd, int __name));
404
405 /* Get the value of the system variable NAME.  */
406 extern long int __sysconf __P ((int __name));
407 extern long int sysconf __P ((int __name));
408
409 #ifdef  __USE_POSIX2
410 /* Get the value of the string-valued system variable NAME.  */
411 extern size_t confstr __P ((int __name, char *__buf, size_t __len));
412 #endif
413
414
415 /* Get the process ID of the calling process.  */
416 extern __pid_t __getpid __P ((void));
417 extern __pid_t getpid __P ((void));
418
419 /* Get the process ID of the calling process's parent.  */
420 extern __pid_t __getppid __P ((void));
421 extern __pid_t getppid __P ((void));
422
423 /* Get the process group ID of the calling process.  */
424 extern __pid_t getpgrp __P ((void));
425 /* The old BSD definition is a bit different.  */
426 extern __pid_t __bsd_getpgrp __P ((__pid_t __pid));
427 #ifdef __FAVOR_BSD
428 /* When we explicitely compile BSD sources use the BSD definition of this
429    function.  Please note that we cannot use parameters for the macro.  */
430 #define getpgrp __bsd_getpgrp
431 #endif
432
433 /* Set the process group ID of the process matching PID to PGID.
434    If PID is zero, the current process's process group ID is set.
435    If PGID is zero, the process ID of the process is used.  */
436 extern int __setpgid __P ((__pid_t __pid, __pid_t __pgid));
437 extern int setpgid __P ((__pid_t __pid, __pid_t __pgid));
438
439 /* Get the process group ID of process PID.  */
440 extern __pid_t __getpgid __P ((__pid_t __pid));
441 #ifdef __USE_XOPEN_EXTENDED
442 extern __pid_t getpgid __P ((__pid_t __pid));
443 #endif
444
445 #if defined __USE_SVID || defined __USE_BSD || defined __USE_XOPEN_EXTENDED
446 /* Both System V and BSD have `setpgrp' functions, but with different
447    calling conventions.  The BSD function is the same as POSIX.1 `setpgid'
448    (above).  The System V function takes no arguments and puts the calling
449    process in its on group like `setpgid (0, 0)'.
450
451    New programs should always use `setpgid' instead.
452
453    The default in GNU is to provide the System V function.  The BSD
454    function is available under -D_BSD_SOURCE with -lbsd-compat.  */
455
456 #ifndef __FAVOR_BSD
457
458 /* Set the process group ID of the calling process to its own PID.
459    This is exactly the same as `setpgid (0, 0)'.  */
460 extern int setpgrp __P ((void));
461
462 #else
463
464 /* Another name for `setpgid' (above).  */
465 extern int setpgrp __P ((__pid_t __pid, __pid_t __pgrp));
466
467 #endif  /* Favor BSD.  */
468 #endif  /* Use SVID or BSD.  */
469
470 /* Create a new session with the calling process as its leader.
471    The process group IDs of the session and the calling process
472    are set to the process ID of the calling process, which is returned.  */
473 extern __pid_t __setsid __P ((void));
474 extern __pid_t setsid __P ((void));
475
476 #ifdef __USE_XOPEN_EXTENDED
477 /* Return the session ID of the given process.  */
478 extern __pid_t getsid __P ((__pid_t __pid));
479 #endif
480
481 /* Get the real user ID of the calling process.  */
482 extern __uid_t __getuid __P ((void));
483 extern __uid_t getuid __P ((void));
484
485 /* Get the effective user ID of the calling process.  */
486 extern __uid_t __geteuid __P ((void));
487 extern __uid_t geteuid __P ((void));
488
489 /* Get the real group ID of the calling process.  */
490 extern __gid_t __getgid __P ((void));
491 extern __gid_t getgid __P ((void));
492
493 /* Get the effective group ID of the calling process.  */
494 extern __gid_t __getegid __P ((void));
495 extern __gid_t getegid __P ((void));
496
497 /* If SIZE is zero, return the number of supplementary groups
498    the calling process is in.  Otherwise, fill in the group IDs
499    of its supplementary groups in LIST and return the number written.  */
500 extern int __getgroups __P ((int __size, __gid_t __list[]));
501 extern int getgroups __P ((int __size, __gid_t __list[]));
502
503 #ifdef  __USE_GNU
504 /* Return nonzero iff the calling process is in group GID.  */
505 extern int __group_member __P ((__gid_t __gid));
506 extern int group_member __P ((__gid_t __gid));
507 #endif
508
509 /* Set the user ID of the calling process to UID.
510    If the calling process is the super-user, set the real
511    and effective user IDs, and the saved set-user-ID to UID;
512    if not, the effective user ID is set to UID.  */
513 extern int __setuid __P ((__uid_t __uid));
514 extern int setuid __P ((__uid_t __uid));
515
516 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
517 /* Set the real user ID of the calling process to RUID,
518    and the effective user ID of the calling process to EUID.  */
519 extern int __setreuid __P ((__uid_t __ruid, __uid_t __euid));
520 extern int setreuid __P ((__uid_t __ruid, __uid_t __euid));
521 #endif
522
523 #ifdef  __USE_BSD
524 /* Set the effective user ID of the calling process to UID.  */
525 extern int seteuid __P ((__uid_t __uid));
526 #endif /* Use BSD.  */
527
528 /* Set the group ID of the calling process to GID.
529    If the calling process is the super-user, set the real
530    and effective group IDs, and the saved set-group-ID to GID;
531    if not, the effective group ID is set to GID.  */
532 extern int __setgid __P ((__gid_t __gid));
533 extern int setgid __P ((__gid_t __gid));
534
535 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
536 /* Set the real group ID of the calling process to RGID,
537    and the effective group ID of the calling process to EGID.  */
538 extern int __setregid __P ((__gid_t __rgid, __gid_t __egid));
539 extern int setregid __P ((__gid_t __rgid, __gid_t __egid));
540 #endif
541
542 #ifdef __USE_BSD
543 /* Set the effective group ID of the calling process to GID.  */
544 extern int setegid __P ((__gid_t __gid));
545 #endif /* Use BSD.  */
546
547
548 /* Clone the calling process, creating an exact copy.
549    Return -1 for errors, 0 to the new process,
550    and the process ID of the new process to the old process.  */
551 extern __pid_t __fork __P ((void));
552 extern __pid_t fork __P ((void));
553
554 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
555 /* Clone the calling process, but without copying the whole address space.
556    The the calling process is suspended until the the new process exits or is
557    replaced by a call to `execve'.  Return -1 for errors, 0 to the new process,
558    and the process ID of the new process to the old process.  */
559 extern __pid_t __vfork __P ((void));
560 extern __pid_t vfork __P ((void));
561 #endif /* Use BSD. */
562
563
564 /* Return the pathname of the terminal FD is open on, or NULL on errors.
565    The returned storage is good only until the next call to this function.  */
566 extern char *ttyname __P ((int __fd));
567
568 /* Store at most BUFLEN characters of the pathname of the terminal FD is
569    open on in BUF.  Return 0 on success, otherwise an error number.  */
570 extern int __ttyname_r __P ((int __fd, char *__buf, size_t __buflen));
571 extern int ttyname_r __P ((int __fd, char *__buf, size_t __buflen));
572
573 /* Return 1 if FD is a valid descriptor associated
574    with a terminal, zero if not.  */
575 extern int __isatty __P ((int __fd));
576 extern int isatty __P ((int __fd));
577
578 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
579 /* Return the index into the active-logins file (utmp) for
580    the controlling terminal.  */
581 extern int ttyslot __P ((void));
582 #endif
583
584
585 /* Make a link to FROM named TO.  */
586 extern int __link __P ((__const char *__from, __const char *__to));
587 extern int link __P ((__const char *__from, __const char *__to));
588
589 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
590 /* Make a symbolic link to FROM named TO.  */
591 extern int __symlink __P ((__const char *__from, __const char *__to));
592 extern int symlink __P ((__const char *__from, __const char *__to));
593
594 /* Read the contents of the symbolic link PATH into no more than
595    LEN bytes of BUF.  The contents are not null-terminated.
596    Returns the number of characters read, or -1 for errors.  */
597 extern int __readlink __P ((__const char *__path, char *__buf, size_t __len));
598 extern int readlink __P ((__const char *__path, char *__buf, size_t __len));
599 #endif /* Use BSD.  */
600
601 /* Remove the link NAME.  */
602 extern int __unlink __P ((__const char *__name));
603 extern int unlink __P ((__const char *__name));
604
605 /* Remove the directory PATH.  */
606 extern int __rmdir __P ((__const char *__path));
607 extern int rmdir __P ((__const char *__path));
608
609
610 /* Return the foreground process group ID of FD.  */
611 extern __pid_t tcgetpgrp __P ((int __fd));
612
613 /* Set the foreground process group ID of FD set PGRP_ID.  */
614 extern int tcsetpgrp __P ((int __fd, __pid_t __pgrp_id));
615
616
617 /* Return the login name of the user.  */
618 extern char *getlogin __P ((void));
619 #ifdef __USE_REENTRANT
620 /* Return at most NAME_LEN characters of the login name of the user in NAME.
621    If it cannot be determined or some other error occurred, return the error
622    code.  Otherwise return 0.  */
623 extern int getlogin_r __P ((char *__name, size_t __name_len));
624 #endif
625
626 #ifdef  __USE_BSD
627 /* Set the login name returned by `getlogin'.  */
628 extern int setlogin __P ((__const char *__name));
629 #endif
630
631
632 #ifdef  __USE_POSIX2
633 /* Process the arguments in ARGV (ARGC of them, minus
634    the program name) for options given in OPTS.
635
636    If `opterr' is zero, no messages are generated
637    for invalid options; it defaults to 1.
638    `optind' is the current index into ARGV.
639    `optarg' is the argument corresponding to the current option.
640    Return the option character from OPTS just read.
641    Return -1 when there are no more options.
642    For unrecognized options, or options missing arguments,
643    `optopt' is set to the option letter, and '?' is returned.
644
645    The OPTS string is a list of characters which are recognized option
646    letters, optionally followed by colons, specifying that that letter
647    takes an argument, to be placed in `optarg'.
648
649    If a letter in OPTS is followed by two colons, its argument is optional.
650    This behavior is specific to the GNU `getopt'.
651
652    The argument `--' causes premature termination of argument scanning,
653    explicitly telling `getopt' that there are no more options.
654
655    If OPTS begins with `--', then non-option arguments
656    are treated as arguments to the option '\0'.
657    This behavior is specific to the GNU `getopt'.  */
658 extern int getopt __P ((int __argc, char *__const * __argv,
659                         __const char *__opts));
660 extern int opterr;
661 extern int optind;
662 extern int optopt;
663 extern char *optarg;
664 #endif
665
666
667 #if defined __USE_BSD || defined __USE_XOPEN
668
669 /* Put the name of the current host in no more than LEN bytes of NAME.
670    The result is null-terminated if LEN is large enough for the full
671    name and the terminator.  */
672 extern int __gethostname __P ((char *__name, size_t __len));
673 extern int gethostname __P ((char *__name, size_t __len));
674
675 /* Set the name of the current host to NAME, which is LEN bytes long.
676    This call is restricted to the super-user.  */
677 extern int sethostname __P ((__const char *__name, size_t __len));
678
679 /* Set the current machine's Internet number to ID.
680    This call is restricted to the super-user.  */
681 extern int sethostid __P ((long int __id));
682
683
684 /* Get and set the NIS (aka YP) domain name, if any.
685    Called just like `gethostname' and `sethostname'.
686    The NIS domain name is usually the empty string when not using NIS.  */
687 extern int getdomainname __P ((char *__name, size_t __len));
688 extern int setdomainname __P ((__const char *__name, size_t __len));
689
690
691 /* Make all changes done to FD actually appear on disk.  */
692 extern int fsync __P ((int __fd));
693
694
695 /* Revoke access permissions to all processes currently communicating
696    with the control terminal, and then send a SIGHUP signal to the process
697    group of the control terminal.  */
698 extern int vhangup __P ((void));
699
700 /* Revoke the access of all descriptors currently open on FILE.  */
701 extern int revoke __P ((__const char *__file));
702
703
704 /* Enable statistical profiling, writing samples of the PC into at most
705    SIZE bytes of SAMPLE_BUFFER; every processor clock tick while profiling
706    is enabled, the system examines the user PC and increments
707    SAMPLE_BUFFER[((PC - OFFSET) / 2) * SCALE / 65536].  If SCALE is zero,
708    disable profiling.  Returns zero on success, -1 on error.  */
709 extern int __profil __P ((unsigned short int *__sample_buffer, size_t __size,
710                           size_t __offset, unsigned int __scale));
711 extern int profil __P ((unsigned short int *__sample_buffer, size_t __size,
712                         size_t __offset, unsigned int __scale));
713
714
715 /* Turn accounting on if NAME is an existing file.  The system will then write
716    a record for each process as it terminates, to this file.  If NAME is NULL,
717    turn accounting off.  This call is restricted to the super-user.  */
718 extern int acct __P ((__const char *__name));
719
720 /* Make PATH be the root directory (the starting point for absolute paths).
721    This call is restricted to the super-user.  */
722 extern int chroot __P ((__const char *__path));
723
724
725 /* Successive calls return the shells listed in `/etc/shells'.  */
726 extern char *getusershell __P ((void));
727 extern void endusershell __P ((void)); /* Discard cached info.  */
728 extern void setusershell __P ((void)); /* Rewind and re-read the file.  */
729
730
731 /* Prompt with PROMPT and read a string from the terminal without echoing.
732    Uses /dev/tty if possible; otherwise stderr and stdin.  */
733 extern char *getpass __P ((__const char *__prompt));
734
735 /* Put the program in the background, and dissociate from the controlling
736    terminal.  If NOCHDIR is zero, do `chdir ("/")'.  If NOCLOSE is zero,
737    redirects stdin, stdout, and stderr to /dev/null.  */
738 extern int daemon __P ((int __nochdir, int __noclose));
739
740 #endif /* Use BSD || X/Open.  */
741
742
743 #if defined __USE_BSD || defined __USE_XOPEN_EXTENDED
744
745 /* Return the current machine's Internet number.  */
746 extern long int gethostid __P ((void));
747
748 /* Make all changes done to all files actually appear on disk.  */
749 extern int sync __P ((void));
750
751
752 /* Return the number of bytes in a page.  This is the system's page size,
753    which is not necessarily the same as the hardware page size.  */
754 extern int __getpagesize __P ((void));
755 extern int getpagesize __P ((void));
756
757
758 /* Truncate FILE to LENGTH bytes.  */
759 extern int truncate __P ((__const char *__file, __off_t __length));
760
761 /* Truncate the file FD is open on to LENGTH bytes.  */
762 extern int ftruncate __P ((int __fd, __off_t __length));
763
764
765 /* Return the maximum number of file descriptors
766    the current process could possibly have.  */
767 extern int __getdtablesize __P ((void));
768 extern int getdtablesize __P ((void));
769
770 #endif /* Use BSD || X/Open Unix.  */
771
772
773 #if defined __USE_MISC || defined __USE_XOPEN_EXTENDED
774
775 /* Set the end of accessible data space (aka "the break") to ADDR.
776    Returns zero on success and -1 for errors (with errno set).  */
777 extern int __brk __P ((__ptr_t __addr));
778 extern int brk __P ((__ptr_t __addr));
779
780 #define __need_ptrdiff_t
781 #include <stddef.h>
782
783 /* Increase or decrease the end of accessible data space by DELTA bytes.
784    If successful, returns the address the previous end of data space
785    (i.e. the beginning of the new space, if DELTA > 0);
786    returns (void *) -1 for errors (with errno set).  */
787 extern __ptr_t __sbrk __P ((ptrdiff_t __delta));
788 extern __ptr_t sbrk __P ((ptrdiff_t __delta));
789 #endif
790
791
792 #ifdef __USE_MISC
793 /* Invoke `system call' number SYSNO, passing it the remaining arguments.
794    This is completely system-dependent, and not often useful.
795
796    In Unix, `syscall' sets `errno' for all errors and most calls return -1
797    for errors; in many systems you cannot pass arguments or get return
798    values for all system calls (`pipe', `fork', and `getppid' typically
799    among them).
800
801    In Mach, all system calls take normal arguments and always return an
802    error code (zero for success).  */
803 extern long int syscall __P ((long int __sysno, ...));
804
805 #endif  /* Use misc.  */
806
807
808 #if (defined __USE_MISC || defined __USE_XOPEN_EXTENDED) && !defined F_LOCK
809 /* NOTE: These declarations also appear in <fcntl.h>; be sure to keep both
810    files consistent.  Some systems have them there and some here, and some
811    software depends on the macros being defined without including both.  */
812
813 /* `lockf' is a simpler interface to the locking facilities of `fcntl'.
814    LEN is always relative to the current file position.
815    The CMD argument is one of the following.  */
816
817 #define F_ULOCK 0       /* Unlock a previously locked region.  */
818 #define F_LOCK  1       /* Lock a region for exclusive use.  */
819 #define F_TLOCK 2       /* Test and lock a region for exclusive use.  */
820 #define F_TEST  3       /* Test a region for other processes locks.  */
821
822 extern int lockf __P ((int __fd, int __cmd, __off_t __len));
823 #endif /* Use misc and F_LOCK not already defined.  */
824
825
826 #ifdef __USE_GNU
827
828 /* Evaluate EXPRESSION, and repeat as long as it returns -1 with `errno'
829    set to EINTR.  */
830
831 #define TEMP_FAILURE_RETRY(expression) \
832   (__extension__                                                              \
833     ({ long int __result;                                                     \
834        do __result = (long int) (expression);                                 \
835        while (__result == -1L && errno == EINTR);                             \
836        __result; }))                                                          \
837
838
839 /* This variable is set nonzero at startup if the process's effective IDs
840    differ from its real IDs, or it is otherwise indicated that extra
841    security should be used.  When this is set the dynamic linker ignores
842    the various environment variables that normally affect it.  */
843 extern int __libc_enable_secure;
844
845 #endif
846
847 #ifdef __USE_POSIX199309
848 /* Synchronize at least the data part of a file with the underlying
849    media.  */
850 extern int fdatasync __P ((int __fildes));
851 #endif /* Use POSIX199309 */
852
853
854 /* XPG4.2 specifies that prototypes for the encryption functions must
855    be defined here.  */
856 #ifdef  __USE_XOPEN
857 /* Encrypt at most 8 characters from KEY using salt to perturb DES.  */
858 extern char *crypt __P ((__const char *__key, __const char *__salt));
859
860 /* Setup DES tables according KEY.  */
861 extern void setkey __P ((__const char *__key));
862
863 /* Encrypt data in BLOCK in place if EDFLAG is zero; otherwise decrypt
864    block in place.  */
865 extern void encrypt __P ((char *__block, int __edflag));
866
867
868 /* Swab pairs bytes in the first N bytes of the area pointed to by
869    FROM and copy the result to TO.  The value of TO must not be in the
870    range [FROM - N + 1, FROM - 1].  If N is odd the first byte in FROM
871    is without partner.  */
872 extern void swab __P ((__const char *__from, char *__to, ssize_t __n));
873 #endif
874
875 __END_DECLS
876
877 #endif /* unistd.h  */