elf: Reformat Makefile.
[glibc.git] / libio / stdio.h
blob4cf9f1c01276c261d2f9a13d15c41ddeab1e12b5
1 /* Define ISO C stdio on top of C++ iostreams.
2 Copyright (C) 1991-2023 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
20 * ISO C99 Standard: 7.19 Input/output <stdio.h>
23 #ifndef _STDIO_H
24 #define _STDIO_H 1
26 #define __GLIBC_INTERNAL_STARTING_HEADER_IMPLEMENTATION
27 #include <bits/libc-header-start.h>
29 __BEGIN_DECLS
31 #define __need_size_t
32 #define __need_NULL
33 #include <stddef.h>
35 #define __need___va_list
36 #include <stdarg.h>
38 #include <bits/types.h>
39 #include <bits/types/__fpos_t.h>
40 #include <bits/types/__fpos64_t.h>
41 #include <bits/types/__FILE.h>
42 #include <bits/types/FILE.h>
43 #include <bits/types/struct_FILE.h>
45 #ifdef __USE_MISC
46 # include <bits/types/cookie_io_functions_t.h>
47 #endif
49 #if defined __USE_XOPEN || defined __USE_XOPEN2K8
50 # ifdef __GNUC__
51 # ifndef _VA_LIST_DEFINED
52 typedef __gnuc_va_list va_list;
53 # define _VA_LIST_DEFINED
54 # endif
55 # else
56 # include <stdarg.h>
57 # endif
58 #endif
60 #if defined __USE_UNIX98 || defined __USE_XOPEN2K
61 # ifndef __off_t_defined
62 # ifndef __USE_FILE_OFFSET64
63 typedef __off_t off_t;
64 # else
65 typedef __off64_t off_t;
66 # endif
67 # define __off_t_defined
68 # endif
69 # if defined __USE_LARGEFILE64 && !defined __off64_t_defined
70 typedef __off64_t off64_t;
71 # define __off64_t_defined
72 # endif
73 #endif
75 #ifdef __USE_XOPEN2K8
76 # ifndef __ssize_t_defined
77 typedef __ssize_t ssize_t;
78 # define __ssize_t_defined
79 # endif
80 #endif
82 /* The type of the second argument to `fgetpos' and `fsetpos'. */
83 #ifndef __USE_FILE_OFFSET64
84 typedef __fpos_t fpos_t;
85 #else
86 typedef __fpos64_t fpos_t;
87 #endif
88 #ifdef __USE_LARGEFILE64
89 typedef __fpos64_t fpos64_t;
90 #endif
92 /* The possibilities for the third argument to `setvbuf'. */
93 #define _IOFBF 0 /* Fully buffered. */
94 #define _IOLBF 1 /* Line buffered. */
95 #define _IONBF 2 /* No buffering. */
98 /* Default buffer size. */
99 #define BUFSIZ 8192
102 /* The value returned by fgetc and similar functions to indicate the
103 end of the file. */
104 #define EOF (-1)
107 /* The possibilities for the third argument to `fseek'.
108 These values should not be changed. */
109 #define SEEK_SET 0 /* Seek from beginning of file. */
110 #define SEEK_CUR 1 /* Seek from current position. */
111 #define SEEK_END 2 /* Seek from end of file. */
112 #ifdef __USE_GNU
113 # define SEEK_DATA 3 /* Seek to next data. */
114 # define SEEK_HOLE 4 /* Seek to next hole. */
115 #endif
118 #if defined __USE_MISC || defined __USE_XOPEN
119 /* Default path prefix for `tempnam' and `tmpnam'. */
120 # define P_tmpdir "/tmp"
121 #endif
123 #define L_tmpnam 20
124 #define TMP_MAX 238328
126 /* Get the values:
127 FILENAME_MAX Maximum length of a filename. */
128 #include <bits/stdio_lim.h>
130 #ifdef __USE_POSIX
131 # define L_ctermid 9
132 # if !defined __USE_XOPEN2K || defined __USE_GNU
133 # define L_cuserid 9
134 # endif
135 #endif
137 #undef FOPEN_MAX
138 #define FOPEN_MAX 16
141 #if __GLIBC_USE (ISOC2X)
142 /* Maximum length of printf output for a NaN. */
143 # define _PRINTF_NAN_LEN_MAX 4
144 #endif
147 /* Standard streams. */
148 extern FILE *stdin; /* Standard input stream. */
149 extern FILE *stdout; /* Standard output stream. */
150 extern FILE *stderr; /* Standard error output stream. */
151 /* C89/C99 say they're macros. Make them happy. */
152 #define stdin stdin
153 #define stdout stdout
154 #define stderr stderr
156 /* Remove file FILENAME. */
157 extern int remove (const char *__filename) __THROW;
158 /* Rename file OLD to NEW. */
159 extern int rename (const char *__old, const char *__new) __THROW;
161 #ifdef __USE_ATFILE
162 /* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */
163 extern int renameat (int __oldfd, const char *__old, int __newfd,
164 const char *__new) __THROW;
165 #endif
167 #ifdef __USE_GNU
168 /* Flags for renameat2. */
169 # define RENAME_NOREPLACE (1 << 0)
170 # define RENAME_EXCHANGE (1 << 1)
171 # define RENAME_WHITEOUT (1 << 2)
173 /* Rename file OLD relative to OLDFD to NEW relative to NEWFD, with
174 additional flags. */
175 extern int renameat2 (int __oldfd, const char *__old, int __newfd,
176 const char *__new, unsigned int __flags) __THROW;
177 #endif
179 /* Close STREAM.
181 This function is a possible cancellation point and therefore not
182 marked with __THROW. */
183 extern int fclose (FILE *__stream) __nonnull ((1));
185 #undef __attr_dealloc_fclose
186 #define __attr_dealloc_fclose __attr_dealloc (fclose, 1)
188 /* Create a temporary file and open it read/write.
190 This function is a possible cancellation point and therefore not
191 marked with __THROW. */
192 #ifndef __USE_FILE_OFFSET64
193 extern FILE *tmpfile (void)
194 __attribute_malloc__ __attr_dealloc_fclose __wur;
195 #else
196 # ifdef __REDIRECT
197 extern FILE *__REDIRECT (tmpfile, (void), tmpfile64)
198 __attribute_malloc__ __attr_dealloc_fclose __wur;
199 # else
200 # define tmpfile tmpfile64
201 # endif
202 #endif
204 #ifdef __USE_LARGEFILE64
205 extern FILE *tmpfile64 (void)
206 __attribute_malloc__ __attr_dealloc_fclose __wur;
207 #endif
209 /* Generate a temporary filename. */
210 extern char *tmpnam (char[L_tmpnam]) __THROW __wur;
212 #ifdef __USE_MISC
213 /* This is the reentrant variant of `tmpnam'. The only difference is
214 that it does not allow S to be NULL. */
215 extern char *tmpnam_r (char __s[L_tmpnam]) __THROW __wur;
216 #endif
219 #if defined __USE_MISC || defined __USE_XOPEN
220 /* Generate a unique temporary filename using up to five characters of PFX
221 if it is not NULL. The directory to put this file in is searched for
222 as follows: First the environment variable "TMPDIR" is checked.
223 If it contains the name of a writable directory, that directory is used.
224 If not and if DIR is not NULL, that value is checked. If that fails,
225 P_tmpdir is tried and finally "/tmp". The storage for the filename
226 is allocated by `malloc'. */
227 extern char *tempnam (const char *__dir, const char *__pfx)
228 __THROW __attribute_malloc__ __wur __attr_dealloc_free;
229 #endif
231 /* Flush STREAM, or all streams if STREAM is NULL.
233 This function is a possible cancellation point and therefore not
234 marked with __THROW. */
235 extern int fflush (FILE *__stream);
237 #ifdef __USE_MISC
238 /* Faster versions when locking is not required.
240 This function is not part of POSIX and therefore no official
241 cancellation point. But due to similarity with an POSIX interface
242 or due to the implementation it is a cancellation point and
243 therefore not marked with __THROW. */
244 extern int fflush_unlocked (FILE *__stream);
245 #endif
247 #ifdef __USE_GNU
248 /* Close all streams.
250 This function is not part of POSIX and therefore no official
251 cancellation point. But due to similarity with an POSIX interface
252 or due to the implementation it is a cancellation point and
253 therefore not marked with __THROW. */
254 extern int fcloseall (void);
255 #endif
258 #ifndef __USE_FILE_OFFSET64
259 /* Open a file and create a new stream for it.
261 This function is a possible cancellation point and therefore not
262 marked with __THROW. */
263 extern FILE *fopen (const char *__restrict __filename,
264 const char *__restrict __modes)
265 __attribute_malloc__ __attr_dealloc_fclose __wur;
266 /* Open a file, replacing an existing stream with it.
268 This function is a possible cancellation point and therefore not
269 marked with __THROW. */
270 extern FILE *freopen (const char *__restrict __filename,
271 const char *__restrict __modes,
272 FILE *__restrict __stream) __wur __nonnull ((3));
273 #else
274 # ifdef __REDIRECT
275 extern FILE *__REDIRECT (fopen, (const char *__restrict __filename,
276 const char *__restrict __modes), fopen64)
277 __attribute_malloc__ __attr_dealloc_fclose __wur;
278 extern FILE *__REDIRECT (freopen, (const char *__restrict __filename,
279 const char *__restrict __modes,
280 FILE *__restrict __stream), freopen64)
281 __wur;
282 # else
283 # define fopen fopen64
284 # define freopen freopen64
285 # endif
286 #endif
287 #ifdef __USE_LARGEFILE64
288 extern FILE *fopen64 (const char *__restrict __filename,
289 const char *__restrict __modes)
290 __attribute_malloc__ __attr_dealloc_fclose __wur;
291 extern FILE *freopen64 (const char *__restrict __filename,
292 const char *__restrict __modes,
293 FILE *__restrict __stream) __wur __nonnull ((3));
294 #endif
296 #ifdef __USE_POSIX
297 /* Create a new stream that refers to an existing system file descriptor. */
298 extern FILE *fdopen (int __fd, const char *__modes) __THROW
299 __attribute_malloc__ __attr_dealloc_fclose __wur;
300 #endif
302 #ifdef __USE_MISC
303 /* Create a new stream that refers to the given magic cookie,
304 and uses the given functions for input and output. */
305 extern FILE *fopencookie (void *__restrict __magic_cookie,
306 const char *__restrict __modes,
307 cookie_io_functions_t __io_funcs) __THROW
308 __attribute_malloc__ __attr_dealloc_fclose __wur;
309 #endif
311 #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
312 /* Create a new stream that refers to a memory buffer. */
313 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes)
314 __THROW __attribute_malloc__ __attr_dealloc_fclose __wur;
316 /* Open a stream that writes into a malloc'd buffer that is expanded as
317 necessary. *BUFLOC and *SIZELOC are updated with the buffer's location
318 and the number of characters written on fflush or fclose. */
319 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW
320 __attribute_malloc__ __attr_dealloc_fclose __wur;
322 #ifdef _WCHAR_H
323 /* Like OPEN_MEMSTREAM, but the stream is wide oriented and produces
324 a wide character string. Declared here only to add attribute malloc
325 and only if <wchar.h> has been previously #included. */
326 extern __FILE *open_wmemstream (wchar_t **__bufloc, size_t *__sizeloc) __THROW
327 __attribute_malloc__ __attr_dealloc_fclose;
328 # endif
329 #endif
331 /* If BUF is NULL, make STREAM unbuffered.
332 Else make it use buffer BUF, of size BUFSIZ. */
333 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
334 /* Make STREAM use buffering mode MODE.
335 If BUF is not NULL, use N bytes of it for buffering;
336 else allocate an internal buffer N bytes long. */
337 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
338 int __modes, size_t __n) __THROW;
340 #ifdef __USE_MISC
341 /* If BUF is NULL, make STREAM unbuffered.
342 Else make it use SIZE bytes of BUF for buffering. */
343 extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
344 size_t __size) __THROW;
346 /* Make STREAM line-buffered. */
347 extern void setlinebuf (FILE *__stream) __THROW;
348 #endif
351 /* Write formatted output to STREAM.
353 This function is a possible cancellation point and therefore not
354 marked with __THROW. */
355 extern int fprintf (FILE *__restrict __stream,
356 const char *__restrict __format, ...);
357 /* Write formatted output to stdout.
359 This function is a possible cancellation point and therefore not
360 marked with __THROW. */
361 extern int printf (const char *__restrict __format, ...);
362 /* Write formatted output to S. */
363 extern int sprintf (char *__restrict __s,
364 const char *__restrict __format, ...) __THROWNL;
366 /* Write formatted output to S from argument list ARG.
368 This function is a possible cancellation point and therefore not
369 marked with __THROW. */
370 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format,
371 __gnuc_va_list __arg);
372 /* Write formatted output to stdout from argument list ARG.
374 This function is a possible cancellation point and therefore not
375 marked with __THROW. */
376 extern int vprintf (const char *__restrict __format, __gnuc_va_list __arg);
377 /* Write formatted output to S from argument list ARG. */
378 extern int vsprintf (char *__restrict __s, const char *__restrict __format,
379 __gnuc_va_list __arg) __THROWNL;
381 #if defined __USE_ISOC99 || defined __USE_UNIX98
382 /* Maximum chars of output to write in MAXLEN. */
383 extern int snprintf (char *__restrict __s, size_t __maxlen,
384 const char *__restrict __format, ...)
385 __THROWNL __attribute__ ((__format__ (__printf__, 3, 4)));
387 extern int vsnprintf (char *__restrict __s, size_t __maxlen,
388 const char *__restrict __format, __gnuc_va_list __arg)
389 __THROWNL __attribute__ ((__format__ (__printf__, 3, 0)));
390 #endif
392 #if defined (__USE_MISC) || __GLIBC_USE (LIB_EXT2)
393 /* Write formatted output to a string dynamically allocated with `malloc'.
394 Store the address of the string in *PTR. */
395 extern int vasprintf (char **__restrict __ptr, const char *__restrict __f,
396 __gnuc_va_list __arg)
397 __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur;
398 extern int __asprintf (char **__restrict __ptr,
399 const char *__restrict __fmt, ...)
400 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
401 extern int asprintf (char **__restrict __ptr,
402 const char *__restrict __fmt, ...)
403 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur;
404 #endif
406 #ifdef __USE_XOPEN2K8
407 /* Write formatted output to a file descriptor. */
408 extern int vdprintf (int __fd, const char *__restrict __fmt,
409 __gnuc_va_list __arg)
410 __attribute__ ((__format__ (__printf__, 2, 0)));
411 extern int dprintf (int __fd, const char *__restrict __fmt, ...)
412 __attribute__ ((__format__ (__printf__, 2, 3)));
413 #endif
416 /* Read formatted input from STREAM.
418 This function is a possible cancellation point and therefore not
419 marked with __THROW. */
420 extern int fscanf (FILE *__restrict __stream,
421 const char *__restrict __format, ...) __wur;
422 /* Read formatted input from stdin.
424 This function is a possible cancellation point and therefore not
425 marked with __THROW. */
426 extern int scanf (const char *__restrict __format, ...) __wur;
427 /* Read formatted input from S. */
428 extern int sscanf (const char *__restrict __s,
429 const char *__restrict __format, ...) __THROW;
431 /* For historical reasons, the C99-compliant versions of the scanf
432 functions are at alternative names. When __LDBL_COMPAT or
433 __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI are in effect, this is handled in
434 bits/stdio-ldbl.h. */
435 #include <bits/floatn.h>
436 #if !__GLIBC_USE (DEPRECATED_SCANF) && !defined __LDBL_COMPAT \
437 && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0
438 # if __GLIBC_USE (C2X_STRTOL)
439 # ifdef __REDIRECT
440 extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
441 const char *__restrict __format, ...),
442 __isoc23_fscanf) __wur;
443 extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
444 __isoc23_scanf) __wur;
445 extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
446 const char *__restrict __format, ...),
447 __isoc23_sscanf);
448 # else
449 extern int __isoc23_fscanf (FILE *__restrict __stream,
450 const char *__restrict __format, ...) __wur;
451 extern int __isoc23_scanf (const char *__restrict __format, ...) __wur;
452 extern int __isoc23_sscanf (const char *__restrict __s,
453 const char *__restrict __format, ...) __THROW;
454 # define fscanf __isoc23_fscanf
455 # define scanf __isoc23_scanf
456 # define sscanf __isoc23_sscanf
457 # endif
458 # else
459 # ifdef __REDIRECT
460 extern int __REDIRECT (fscanf, (FILE *__restrict __stream,
461 const char *__restrict __format, ...),
462 __isoc99_fscanf) __wur;
463 extern int __REDIRECT (scanf, (const char *__restrict __format, ...),
464 __isoc99_scanf) __wur;
465 extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s,
466 const char *__restrict __format, ...),
467 __isoc99_sscanf);
468 # else
469 extern int __isoc99_fscanf (FILE *__restrict __stream,
470 const char *__restrict __format, ...) __wur;
471 extern int __isoc99_scanf (const char *__restrict __format, ...) __wur;
472 extern int __isoc99_sscanf (const char *__restrict __s,
473 const char *__restrict __format, ...) __THROW;
474 # define fscanf __isoc99_fscanf
475 # define scanf __isoc99_scanf
476 # define sscanf __isoc99_sscanf
477 # endif
478 # endif
479 #endif
481 #ifdef __USE_ISOC99
482 /* Read formatted input from S into argument list ARG.
484 This function is a possible cancellation point and therefore not
485 marked with __THROW. */
486 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format,
487 __gnuc_va_list __arg)
488 __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
490 /* Read formatted input from stdin into argument list ARG.
492 This function is a possible cancellation point and therefore not
493 marked with __THROW. */
494 extern int vscanf (const char *__restrict __format, __gnuc_va_list __arg)
495 __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
497 /* Read formatted input from S into argument list ARG. */
498 extern int vsscanf (const char *__restrict __s,
499 const char *__restrict __format, __gnuc_va_list __arg)
500 __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
502 /* Same redirection as above for the v*scanf family. */
503 # if !__GLIBC_USE (DEPRECATED_SCANF)
504 # if __GLIBC_USE (C2X_STRTOL)
505 # if defined __REDIRECT && !defined __LDBL_COMPAT \
506 && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0
507 extern int __REDIRECT (vfscanf,
508 (FILE *__restrict __s,
509 const char *__restrict __format, __gnuc_va_list __arg),
510 __isoc23_vfscanf)
511 __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
512 extern int __REDIRECT (vscanf, (const char *__restrict __format,
513 __gnuc_va_list __arg), __isoc23_vscanf)
514 __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
515 extern int __REDIRECT_NTH (vsscanf,
516 (const char *__restrict __s,
517 const char *__restrict __format,
518 __gnuc_va_list __arg), __isoc23_vsscanf)
519 __attribute__ ((__format__ (__scanf__, 2, 0)));
520 # elif !defined __REDIRECT
521 extern int __isoc23_vfscanf (FILE *__restrict __s,
522 const char *__restrict __format,
523 __gnuc_va_list __arg) __wur;
524 extern int __isoc23_vscanf (const char *__restrict __format,
525 __gnuc_va_list __arg) __wur;
526 extern int __isoc23_vsscanf (const char *__restrict __s,
527 const char *__restrict __format,
528 __gnuc_va_list __arg) __THROW;
529 # define vfscanf __isoc23_vfscanf
530 # define vscanf __isoc23_vscanf
531 # define vsscanf __isoc23_vsscanf
532 # endif
533 # else
534 # if defined __REDIRECT && !defined __LDBL_COMPAT \
535 && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0
536 extern int __REDIRECT (vfscanf,
537 (FILE *__restrict __s,
538 const char *__restrict __format, __gnuc_va_list __arg),
539 __isoc99_vfscanf)
540 __attribute__ ((__format__ (__scanf__, 2, 0))) __wur;
541 extern int __REDIRECT (vscanf, (const char *__restrict __format,
542 __gnuc_va_list __arg), __isoc99_vscanf)
543 __attribute__ ((__format__ (__scanf__, 1, 0))) __wur;
544 extern int __REDIRECT_NTH (vsscanf,
545 (const char *__restrict __s,
546 const char *__restrict __format,
547 __gnuc_va_list __arg), __isoc99_vsscanf)
548 __attribute__ ((__format__ (__scanf__, 2, 0)));
549 # elif !defined __REDIRECT
550 extern int __isoc99_vfscanf (FILE *__restrict __s,
551 const char *__restrict __format,
552 __gnuc_va_list __arg) __wur;
553 extern int __isoc99_vscanf (const char *__restrict __format,
554 __gnuc_va_list __arg) __wur;
555 extern int __isoc99_vsscanf (const char *__restrict __s,
556 const char *__restrict __format,
557 __gnuc_va_list __arg) __THROW;
558 # define vfscanf __isoc99_vfscanf
559 # define vscanf __isoc99_vscanf
560 # define vsscanf __isoc99_vsscanf
561 # endif
562 # endif
563 # endif
564 #endif /* Use ISO C9x. */
567 /* Read a character from STREAM.
569 These functions are possible cancellation points and therefore not
570 marked with __THROW. */
571 extern int fgetc (FILE *__stream);
572 extern int getc (FILE *__stream);
574 /* Read a character from stdin.
576 This function is a possible cancellation point and therefore not
577 marked with __THROW. */
578 extern int getchar (void);
580 #ifdef __USE_POSIX199506
581 /* These are defined in POSIX.1:1996.
583 These functions are possible cancellation points and therefore not
584 marked with __THROW. */
585 extern int getc_unlocked (FILE *__stream);
586 extern int getchar_unlocked (void);
587 #endif /* Use POSIX. */
589 #ifdef __USE_MISC
590 /* Faster version when locking is not necessary.
592 This function is not part of POSIX and therefore no official
593 cancellation point. But due to similarity with an POSIX interface
594 or due to the implementation it is a cancellation point and
595 therefore not marked with __THROW. */
596 extern int fgetc_unlocked (FILE *__stream);
597 #endif /* Use MISC. */
600 /* Write a character to STREAM.
602 These functions are possible cancellation points and therefore not
603 marked with __THROW.
605 These functions is a possible cancellation point and therefore not
606 marked with __THROW. */
607 extern int fputc (int __c, FILE *__stream);
608 extern int putc (int __c, FILE *__stream);
610 /* Write a character to stdout.
612 This function is a possible cancellation point and therefore not
613 marked with __THROW. */
614 extern int putchar (int __c);
616 #ifdef __USE_MISC
617 /* Faster version when locking is not necessary.
619 This function is not part of POSIX and therefore no official
620 cancellation point. But due to similarity with an POSIX interface
621 or due to the implementation it is a cancellation point and
622 therefore not marked with __THROW. */
623 extern int fputc_unlocked (int __c, FILE *__stream);
624 #endif /* Use MISC. */
626 #ifdef __USE_POSIX199506
627 /* These are defined in POSIX.1:1996.
629 These functions are possible cancellation points and therefore not
630 marked with __THROW. */
631 extern int putc_unlocked (int __c, FILE *__stream);
632 extern int putchar_unlocked (int __c);
633 #endif /* Use POSIX. */
636 #if defined __USE_MISC \
637 || (defined __USE_XOPEN && !defined __USE_XOPEN2K)
638 /* Get a word (int) from STREAM. */
639 extern int getw (FILE *__stream);
641 /* Write a word (int) to STREAM. */
642 extern int putw (int __w, FILE *__stream);
643 #endif
646 /* Get a newline-terminated string of finite length from STREAM.
648 This function is a possible cancellation point and therefore not
649 marked with __THROW. */
650 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
651 __wur __fortified_attr_access (__write_only__, 1, 2);
653 #if __GLIBC_USE (DEPRECATED_GETS)
654 /* Get a newline-terminated string from stdin, removing the newline.
656 This function is impossible to use safely. It has been officially
657 removed from ISO C11 and ISO C++14, and we have also removed it
658 from the _GNU_SOURCE feature list. It remains available when
659 explicitly using an old ISO C, Unix, or POSIX standard.
661 This function is a possible cancellation point and therefore not
662 marked with __THROW. */
663 extern char *gets (char *__s) __wur __attribute_deprecated__;
664 #endif
666 #ifdef __USE_GNU
667 /* This function does the same as `fgets' but does not lock the stream.
669 This function is not part of POSIX and therefore no official
670 cancellation point. But due to similarity with an POSIX interface
671 or due to the implementation it is a cancellation point and
672 therefore not marked with __THROW. */
673 extern char *fgets_unlocked (char *__restrict __s, int __n,
674 FILE *__restrict __stream) __wur
675 __fortified_attr_access (__write_only__, 1, 2);
676 #endif
679 #if defined __USE_XOPEN2K8 || __GLIBC_USE (LIB_EXT2)
680 /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
681 (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
682 NULL), pointing to *N characters of space. It is realloc'd as
683 necessary. Returns the number of characters read (not including the
684 null terminator), or -1 on error or EOF.
686 These functions are not part of POSIX and therefore no official
687 cancellation point. But due to similarity with an POSIX interface
688 or due to the implementation they are cancellation points and
689 therefore not marked with __THROW. */
690 extern __ssize_t __getdelim (char **__restrict __lineptr,
691 size_t *__restrict __n, int __delimiter,
692 FILE *__restrict __stream) __wur;
693 extern __ssize_t getdelim (char **__restrict __lineptr,
694 size_t *__restrict __n, int __delimiter,
695 FILE *__restrict __stream) __wur;
697 /* Like `getdelim', but reads up to a newline.
699 This function is not part of POSIX and therefore no official
700 cancellation point. But due to similarity with an POSIX interface
701 or due to the implementation it is a cancellation point and
702 therefore not marked with __THROW. */
703 extern __ssize_t getline (char **__restrict __lineptr,
704 size_t *__restrict __n,
705 FILE *__restrict __stream) __wur;
706 #endif
709 /* Write a string to STREAM.
711 This function is a possible cancellation point and therefore not
712 marked with __THROW. */
713 extern int fputs (const char *__restrict __s, FILE *__restrict __stream);
715 /* Write a string, followed by a newline, to stdout.
717 This function is a possible cancellation point and therefore not
718 marked with __THROW. */
719 extern int puts (const char *__s);
722 /* Push a character back onto the input buffer of STREAM.
724 This function is a possible cancellation point and therefore not
725 marked with __THROW. */
726 extern int ungetc (int __c, FILE *__stream);
729 /* Read chunks of generic data from STREAM.
731 This function is a possible cancellation point and therefore not
732 marked with __THROW. */
733 extern size_t fread (void *__restrict __ptr, size_t __size,
734 size_t __n, FILE *__restrict __stream) __wur;
735 /* Write chunks of generic data to STREAM.
737 This function is a possible cancellation point and therefore not
738 marked with __THROW. */
739 extern size_t fwrite (const void *__restrict __ptr, size_t __size,
740 size_t __n, FILE *__restrict __s);
742 #ifdef __USE_GNU
743 /* This function does the same as `fputs' but does not lock the stream.
745 This function is not part of POSIX and therefore no official
746 cancellation point. But due to similarity with an POSIX interface
747 or due to the implementation it is a cancellation point and
748 therefore not marked with __THROW. */
749 extern int fputs_unlocked (const char *__restrict __s,
750 FILE *__restrict __stream);
751 #endif
753 #ifdef __USE_MISC
754 /* Faster versions when locking is not necessary.
756 These functions are not part of POSIX and therefore no official
757 cancellation point. But due to similarity with an POSIX interface
758 or due to the implementation they are cancellation points and
759 therefore not marked with __THROW. */
760 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
761 size_t __n, FILE *__restrict __stream) __wur;
762 extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size,
763 size_t __n, FILE *__restrict __stream);
764 #endif
767 /* Seek to a certain position on STREAM.
769 This function is a possible cancellation point and therefore not
770 marked with __THROW. */
771 extern int fseek (FILE *__stream, long int __off, int __whence);
772 /* Return the current position of STREAM.
774 This function is a possible cancellation point and therefore not
775 marked with __THROW. */
776 extern long int ftell (FILE *__stream) __wur;
777 /* Rewind to the beginning of STREAM.
779 This function is a possible cancellation point and therefore not
780 marked with __THROW. */
781 extern void rewind (FILE *__stream);
783 /* The Single Unix Specification, Version 2, specifies an alternative,
784 more adequate interface for the two functions above which deal with
785 file offset. `long int' is not the right type. These definitions
786 are originally defined in the Large File Support API. */
788 #if defined __USE_LARGEFILE || defined __USE_XOPEN2K
789 # ifndef __USE_FILE_OFFSET64
790 /* Seek to a certain position on STREAM.
792 This function is a possible cancellation point and therefore not
793 marked with __THROW. */
794 extern int fseeko (FILE *__stream, __off_t __off, int __whence);
795 /* Return the current position of STREAM.
797 This function is a possible cancellation point and therefore not
798 marked with __THROW. */
799 extern __off_t ftello (FILE *__stream) __wur;
800 # else
801 # ifdef __REDIRECT
802 extern int __REDIRECT (fseeko,
803 (FILE *__stream, __off64_t __off, int __whence),
804 fseeko64);
805 extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64);
806 # else
807 # define fseeko fseeko64
808 # define ftello ftello64
809 # endif
810 # endif
811 #endif
813 #ifndef __USE_FILE_OFFSET64
814 /* Get STREAM's position.
816 This function is a possible cancellation point and therefore not
817 marked with __THROW. */
818 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos);
819 /* Set STREAM's position.
821 This function is a possible cancellation point and therefore not
822 marked with __THROW. */
823 extern int fsetpos (FILE *__stream, const fpos_t *__pos);
824 #else
825 # ifdef __REDIRECT
826 extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
827 fpos_t *__restrict __pos), fgetpos64);
828 extern int __REDIRECT (fsetpos,
829 (FILE *__stream, const fpos_t *__pos), fsetpos64);
830 # else
831 # define fgetpos fgetpos64
832 # define fsetpos fsetpos64
833 # endif
834 #endif
836 #ifdef __USE_LARGEFILE64
837 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence);
838 extern __off64_t ftello64 (FILE *__stream) __wur;
839 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos);
840 extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos);
841 #endif
843 /* Clear the error and EOF indicators for STREAM. */
844 extern void clearerr (FILE *__stream) __THROW;
845 /* Return the EOF indicator for STREAM. */
846 extern int feof (FILE *__stream) __THROW __wur;
847 /* Return the error indicator for STREAM. */
848 extern int ferror (FILE *__stream) __THROW __wur;
850 #ifdef __USE_MISC
851 /* Faster versions when locking is not required. */
852 extern void clearerr_unlocked (FILE *__stream) __THROW;
853 extern int feof_unlocked (FILE *__stream) __THROW __wur;
854 extern int ferror_unlocked (FILE *__stream) __THROW __wur;
855 #endif
858 /* Print a message describing the meaning of the value of errno.
860 This function is a possible cancellation point and therefore not
861 marked with __THROW. */
862 extern void perror (const char *__s) __COLD;
865 #ifdef __USE_POSIX
866 /* Return the system file descriptor for STREAM. */
867 extern int fileno (FILE *__stream) __THROW __wur;
868 #endif /* Use POSIX. */
870 #ifdef __USE_MISC
871 /* Faster version when locking is not required. */
872 extern int fileno_unlocked (FILE *__stream) __THROW __wur;
873 #endif
876 #ifdef __USE_POSIX2
877 /* Close a stream opened by popen and return the status of its child.
879 This function is a possible cancellation point and therefore not
880 marked with __THROW. */
881 extern int pclose (FILE *__stream);
883 /* Create a new stream connected to a pipe running the given command.
885 This function is a possible cancellation point and therefore not
886 marked with __THROW. */
887 extern FILE *popen (const char *__command, const char *__modes)
888 __attribute_malloc__ __attr_dealloc (pclose, 1) __wur;
890 #endif
893 #ifdef __USE_POSIX
894 /* Return the name of the controlling terminal. */
895 extern char *ctermid (char *__s) __THROW
896 __attr_access ((__write_only__, 1));
897 #endif /* Use POSIX. */
900 #if (defined __USE_XOPEN && !defined __USE_XOPEN2K) || defined __USE_GNU
901 /* Return the name of the current user. */
902 extern char *cuserid (char *__s)
903 __attr_access ((__write_only__, 1));
904 #endif /* Use X/Open, but not issue 6. */
907 #ifdef __USE_GNU
908 struct obstack; /* See <obstack.h>. */
910 /* Write formatted output to an obstack. */
911 extern int obstack_printf (struct obstack *__restrict __obstack,
912 const char *__restrict __format, ...)
913 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3)));
914 extern int obstack_vprintf (struct obstack *__restrict __obstack,
915 const char *__restrict __format,
916 __gnuc_va_list __args)
917 __THROWNL __attribute__ ((__format__ (__printf__, 2, 0)));
918 #endif /* Use GNU. */
921 #ifdef __USE_POSIX199506
922 /* These are defined in POSIX.1:1996. */
924 /* Acquire ownership of STREAM. */
925 extern void flockfile (FILE *__stream) __THROW;
927 /* Try to acquire ownership of STREAM but do not block if it is not
928 possible. */
929 extern int ftrylockfile (FILE *__stream) __THROW __wur;
931 /* Relinquish the ownership granted for STREAM. */
932 extern void funlockfile (FILE *__stream) __THROW;
933 #endif /* POSIX */
935 #if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU
936 /* X/Open Issues 1-5 required getopt to be declared in this
937 header. It was removed in Issue 6. GNU follows Issue 6. */
938 # include <bits/getopt_posix.h>
939 #endif
941 /* Slow-path routines used by the optimized inline functions in
942 bits/stdio.h. */
943 extern int __uflow (FILE *);
944 extern int __overflow (FILE *, int);
946 #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
947 /* Declare all functions from bits/stdio2-decl.h first. */
948 # include <bits/stdio2-decl.h>
949 #endif
951 /* The following headers provide asm redirections. These redirections must
952 appear before the first usage of these functions, e.g. in bits/stdio.h. */
953 #if defined __LDBL_COMPAT || __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
954 # include <bits/stdio-ldbl.h>
955 #endif
957 /* If we are compiling with optimizing read this file. It contains
958 several optimizing inline functions and macros. */
959 #ifdef __USE_EXTERN_INLINES
960 # include <bits/stdio.h>
961 #endif
962 #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function
963 /* Now include the function definitions and redirects too. */
964 # include <bits/stdio2.h>
965 #endif
967 __END_DECLS
969 #endif /* <stdio.h> included. */