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