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