1 /* Define ISO C stdio on top of C++ iostreams. 2 Copyright (C) 1991-2015 Free Software Foundation, Inc. 3 This file is part of the GNU C Library. 4 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. 9 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. 14 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 <http://www.gnu.org/licenses/>. */ 18 19 /* 20 * ISO C99 Standard: 7.19 Input/output <stdio.h> 21 */ 22 23 #ifndef _STDIO_H 24 25 #if !defined __need_FILE && !defined __need___FILE 26 # define _STDIO_H 1 27 # include <features.h> 28 29 __BEGIN_DECLS 30 31 # define __need_size_t 32 # define __need_NULL 33 # include <stddef.h> 34 35 # include <bits/types.h> 36 # define __need_FILE 37 # define __need___FILE 38 #endif /* Don't need FILE. */ 39 40 41 #if !defined __FILE_defined && defined __need_FILE 42 43 /* Define outside of namespace so the C++ is happy. */ 44 struct _IO_FILE; 45 46 __BEGIN_NAMESPACE_STD 47 /* The opaque type of streams. This is the definition used elsewhere. */ 48 typedef struct _IO_FILE FILE; 49 __END_NAMESPACE_STD 50 #if defined __USE_LARGEFILE64 || defined __USE_POSIX \ 51 || defined __USE_ISOC99 || defined __USE_XOPEN \ 52 || defined __USE_POSIX2 53 __USING_NAMESPACE_STD(FILE) 54 #endif 55 56 # define __FILE_defined 1 57 #endif /* FILE not defined. */ 58 #undef __need_FILE 59 60 61 #if !defined ____FILE_defined && defined __need___FILE 62 63 /* The opaque type of streams. This is the definition used elsewhere. */ 64 typedef struct _IO_FILE __FILE; 65 66 # define ____FILE_defined 1 67 #endif /* __FILE not defined. */ 68 #undef __need___FILE 69 70 71 #ifdef _STDIO_H 72 #define _STDIO_USES_IOSTREAM 73 74 #include <libio.h> 75 76 #if defined __USE_XOPEN || defined __USE_XOPEN2K8 77 # ifdef __GNUC__ 78 # ifndef _VA_LIST_DEFINED 79 typedef _G_va_list va_list; 80 # define _VA_LIST_DEFINED 81 # endif 82 # else 83 # include <stdarg.h> 84 # endif 85 #endif 86 87 #ifdef __USE_XOPEN2K8 88 # ifndef __off_t_defined 89 # ifndef __USE_FILE_OFFSET64 90 typedef __off_t off_t; 91 # else 92 typedef __off64_t off_t; 93 # endif 94 # define __off_t_defined 95 # endif 96 # if defined __USE_LARGEFILE64 && !defined __off64_t_defined 97 typedef __off64_t off64_t; 98 # define __off64_t_defined 99 # endif 100 101 # ifndef __ssize_t_defined 102 typedef __ssize_t ssize_t; 103 # define __ssize_t_defined 104 # endif 105 #endif 106 107 /* The type of the second argument to `fgetpos' and `fsetpos'. */ 108 __BEGIN_NAMESPACE_STD 109 #ifndef __USE_FILE_OFFSET64 110 typedef _G_fpos_t fpos_t; 111 #else 112 typedef _G_fpos64_t fpos_t; 113 #endif 114 __END_NAMESPACE_STD 115 #ifdef __USE_LARGEFILE64 116 typedef _G_fpos64_t fpos64_t; 117 #endif 118 119 /* The possibilities for the third argument to `setvbuf'. */ 120 #define _IOFBF 0 /* Fully buffered. */ 121 #define _IOLBF 1 /* Line buffered. */ 122 #define _IONBF 2 /* No buffering. */ 123 124 125 /* Default buffer size. */ 126 #ifndef BUFSIZ 127 # define BUFSIZ _IO_BUFSIZ 128 #endif 129 130 131 /* End of file character. 132 Some things throughout the library rely on this being -1. */ 133 #ifndef EOF 134 # define EOF (-1) 135 #endif 136 137 138 /* The possibilities for the third argument to `fseek'. 139 These values should not be changed. */ 140 #define SEEK_SET 0 /* Seek from beginning of file. */ 141 #define SEEK_CUR 1 /* Seek from current position. */ 142 #define SEEK_END 2 /* Seek from end of file. */ 143 #ifdef __USE_GNU 144 # define SEEK_DATA 3 /* Seek to next data. */ 145 # define SEEK_HOLE 4 /* Seek to next hole. */ 146 #endif 147 148 149 #if defined __USE_MISC || defined __USE_XOPEN 150 /* Default path prefix for `tempnam' and `tmpnam'. */ 151 # define P_tmpdir "/tmp" 152 #endif 153 154 155 /* Get the values: 156 L_tmpnam How long an array of chars must be to be passed to `tmpnam'. 157 TMP_MAX The minimum number of unique filenames generated by tmpnam 158 (and tempnam when it uses tmpnam's name space), 159 or tempnam (the two are separate). 160 L_ctermid How long an array to pass to `ctermid'. 161 L_cuserid How long an array to pass to `cuserid'. 162 FOPEN_MAX Minimum number of files that can be open at once. 163 FILENAME_MAX Maximum length of a filename. */ 164 #include <bits/stdio_lim.h> 165 166 167 /* Standard streams. */ 168 extern struct _IO_FILE *stdin; /* Standard input stream. */ 169 extern struct _IO_FILE *stdout; /* Standard output stream. */ 170 extern struct _IO_FILE *stderr; /* Standard error output stream. */ 171 /* C89/C99 say they're macros. Make them happy. */ 172 #define stdin stdin 173 #define stdout stdout 174 #define stderr stderr 175 176 __BEGIN_NAMESPACE_STD 177 /* Remove file FILENAME. */ 178 extern int remove (const char *__filename) __THROW; 179 /* Rename file OLD to NEW. */ 180 extern int rename (const char *__old, const char *__new) __THROW; 181 __END_NAMESPACE_STD 182 183 #ifdef __USE_ATFILE 184 /* Rename file OLD relative to OLDFD to NEW relative to NEWFD. */ 185 extern int renameat (int __oldfd, const char *__old, int __newfd, 186 const char *__new) __THROW; 187 #endif 188 189 __BEGIN_NAMESPACE_STD 190 /* Create a temporary file and open it read/write. 191 192 This function is a possible cancellation point and therefore not 193 marked with __THROW. */ 194 #ifndef __USE_FILE_OFFSET64 195 extern FILE *tmpfile (void) __wur; 196 #else 197 # ifdef __REDIRECT 198 extern FILE *__REDIRECT (tmpfile, (void), tmpfile64) __wur; 199 # else 200 # define tmpfile tmpfile64 201 # endif 202 #endif 203 204 #ifdef __USE_LARGEFILE64 205 extern FILE *tmpfile64 (void) __wur; 206 #endif 207 208 /* Generate a temporary filename. */ 209 extern char *tmpnam (char *__s) __THROW __wur; 210 __END_NAMESPACE_STD 211 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) __THROW __wur; 216 #endif 217 218 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; 229 #endif 230 231 232 __BEGIN_NAMESPACE_STD 233 /* Close STREAM. 234 235 This function is a possible cancellation point and therefore not 236 marked with __THROW. */ 237 extern int fclose (FILE *__stream); 238 /* Flush STREAM, or all streams if STREAM is NULL. 239 240 This function is a possible cancellation point and therefore not 241 marked with __THROW. */ 242 extern int fflush (FILE *__stream); 243 __END_NAMESPACE_STD 244 245 #ifdef __USE_MISC 246 /* Faster versions when locking is not required. 247 248 This function is not part of POSIX and therefore no official 249 cancellation point. But due to similarity with an POSIX interface 250 or due to the implementation it is a cancellation point and 251 therefore not marked with __THROW. */ 252 extern int fflush_unlocked (FILE *__stream); 253 #endif 254 255 #ifdef __USE_GNU 256 /* Close all streams. 257 258 This function is not part of POSIX and therefore no official 259 cancellation point. But due to similarity with an POSIX interface 260 or due to the implementation it is a cancellation point and 261 therefore not marked with __THROW. */ 262 extern int fcloseall (void); 263 #endif 264 265 266 __BEGIN_NAMESPACE_STD 267 #ifndef __USE_FILE_OFFSET64 268 /* Open a file and create a new stream for it. 269 270 This function is a possible cancellation point and therefore not 271 marked with __THROW. */ 272 extern FILE *fopen (const char *__restrict __filename, 273 const char *__restrict __modes) __wur; 274 /* Open a file, replacing an existing stream with it. 275 276 This function is a possible cancellation point and therefore not 277 marked with __THROW. */ 278 extern FILE *freopen (const char *__restrict __filename, 279 const char *__restrict __modes, 280 FILE *__restrict __stream) __wur; 281 #else 282 # ifdef __REDIRECT 283 extern FILE *__REDIRECT (fopen, (const char *__restrict __filename, 284 const char *__restrict __modes), fopen64) 285 __wur; 286 extern FILE *__REDIRECT (freopen, (const char *__restrict __filename, 287 const char *__restrict __modes, 288 FILE *__restrict __stream), freopen64) 289 __wur; 290 # else 291 # define fopen fopen64 292 # define freopen freopen64 293 # endif 294 #endif 295 __END_NAMESPACE_STD 296 #ifdef __USE_LARGEFILE64 297 extern FILE *fopen64 (const char *__restrict __filename, 298 const char *__restrict __modes) __wur; 299 extern FILE *freopen64 (const char *__restrict __filename, 300 const char *__restrict __modes, 301 FILE *__restrict __stream) __wur; 302 #endif 303 304 #ifdef __USE_POSIX 305 /* Create a new stream that refers to an existing system file descriptor. */ 306 extern FILE *fdopen (int __fd, const char *__modes) __THROW __wur; 307 #endif 308 309 #ifdef __USE_GNU 310 /* Create a new stream that refers to the given magic cookie, 311 and uses the given functions for input and output. */ 312 extern FILE *fopencookie (void *__restrict __magic_cookie, 313 const char *__restrict __modes, 314 _IO_cookie_io_functions_t __io_funcs) __THROW __wur; 315 #endif 316 317 #ifdef __USE_XOPEN2K8 318 /* Create a new stream that refers to a memory buffer. */ 319 extern FILE *fmemopen (void *__s, size_t __len, const char *__modes) 320 __THROW __wur; 321 322 /* Open a stream that writes into a malloc'd buffer that is expanded as 323 necessary. *BUFLOC and *SIZELOC are updated with the buffer's location 324 and the number of characters written on fflush or fclose. */ 325 extern FILE *open_memstream (char **__bufloc, size_t *__sizeloc) __THROW __wur; 326 #endif 327 328 329 __BEGIN_NAMESPACE_STD 330 /* If BUF is NULL, make STREAM unbuffered. 331 Else make it use buffer BUF, of size BUFSIZ. */ 332 extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW; 333 /* Make STREAM use buffering mode MODE. 334 If BUF is not NULL, use N bytes of it for buffering; 335 else allocate an internal buffer N bytes long. */ 336 extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf, 337 int __modes, size_t __n) __THROW; 338 __END_NAMESPACE_STD 339 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; 345 346 /* Make STREAM line-buffered. */ 347 extern void setlinebuf (FILE *__stream) __THROW; 348 #endif 349 350 351 __BEGIN_NAMESPACE_STD 352 /* Write formatted output to STREAM. 353 354 This function is a possible cancellation point and therefore not 355 marked with __THROW. */ 356 extern int fprintf (FILE *__restrict __stream, 357 const char *__restrict __format, ...); 358 /* Write formatted output to stdout. 359 360 This function is a possible cancellation point and therefore not 361 marked with __THROW. */ 362 extern int printf (const char *__restrict __format, ...); 363 /* Write formatted output to S. */ 364 extern int sprintf (char *__restrict __s, 365 const char *__restrict __format, ...) __THROWNL; 366 367 /* Write formatted output to S from argument list ARG. 368 369 This function is a possible cancellation point and therefore not 370 marked with __THROW. */ 371 extern int vfprintf (FILE *__restrict __s, const char *__restrict __format, 372 _G_va_list __arg); 373 /* Write formatted output to stdout from argument list ARG. 374 375 This function is a possible cancellation point and therefore not 376 marked with __THROW. */ 377 extern int vprintf (const char *__restrict __format, _G_va_list __arg); 378 /* Write formatted output to S from argument list ARG. */ 379 extern int vsprintf (char *__restrict __s, const char *__restrict __format, 380 _G_va_list __arg) __THROWNL; 381 __END_NAMESPACE_STD 382 383 #if defined __USE_ISOC99 || defined __USE_UNIX98 384 __BEGIN_NAMESPACE_C99 385 /* Maximum chars of output to write in MAXLEN. */ 386 extern int snprintf (char *__restrict __s, size_t __maxlen, 387 const char *__restrict __format, ...) 388 __THROWNL __attribute__ ((__format__ (__printf__, 3, 4))); 389 390 extern int vsnprintf (char *__restrict __s, size_t __maxlen, 391 const char *__restrict __format, _G_va_list __arg) 392 __THROWNL __attribute__ ((__format__ (__printf__, 3, 0))); 393 __END_NAMESPACE_C99 394 #endif 395 396 #ifdef __USE_GNU 397 /* Write formatted output to a string dynamically allocated with `malloc'. 398 Store the address of the string in *PTR. */ 399 extern int vasprintf (char **__restrict __ptr, const char *__restrict __f, 400 _G_va_list __arg) 401 __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))) __wur; 402 extern int __asprintf (char **__restrict __ptr, 403 const char *__restrict __fmt, ...) 404 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; 405 extern int asprintf (char **__restrict __ptr, 406 const char *__restrict __fmt, ...) 407 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))) __wur; 408 #endif 409 410 #ifdef __USE_XOPEN2K8 411 /* Write formatted output to a file descriptor. */ 412 extern int vdprintf (int __fd, const char *__restrict __fmt, 413 _G_va_list __arg) 414 __attribute__ ((__format__ (__printf__, 2, 0))); 415 extern int dprintf (int __fd, const char *__restrict __fmt, ...) 416 __attribute__ ((__format__ (__printf__, 2, 3))); 417 #endif 418 419 420 __BEGIN_NAMESPACE_STD 421 /* Read formatted input from STREAM. 422 423 This function is a possible cancellation point and therefore not 424 marked with __THROW. */ 425 extern int fscanf (FILE *__restrict __stream, 426 const char *__restrict __format, ...) __wur; 427 /* Read formatted input from stdin. 428 429 This function is a possible cancellation point and therefore not 430 marked with __THROW. */ 431 extern int scanf (const char *__restrict __format, ...) __wur; 432 /* Read formatted input from S. */ 433 extern int sscanf (const char *__restrict __s, 434 const char *__restrict __format, ...) __THROW; 435 436 #if defined __USE_ISOC99 && !defined __USE_GNU \ 437 && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ 438 && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) 439 # ifdef __REDIRECT 440 /* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[ 441 GNU extension which conflicts with valid %a followed by letter 442 s, S or [. */ 443 extern int __REDIRECT (fscanf, (FILE *__restrict __stream, 444 const char *__restrict __format, ...), 445 __isoc99_fscanf) __wur; 446 extern int __REDIRECT (scanf, (const char *__restrict __format, ...), 447 __isoc99_scanf) __wur; 448 extern int __REDIRECT_NTH (sscanf, (const char *__restrict __s, 449 const char *__restrict __format, ...), 450 __isoc99_sscanf); 451 # else 452 extern int __isoc99_fscanf (FILE *__restrict __stream, 453 const char *__restrict __format, ...) __wur; 454 extern int __isoc99_scanf (const char *__restrict __format, ...) __wur; 455 extern int __isoc99_sscanf (const char *__restrict __s, 456 const char *__restrict __format, ...) __THROW; 457 # define fscanf __isoc99_fscanf 458 # define scanf __isoc99_scanf 459 # define sscanf __isoc99_sscanf 460 # endif 461 #endif 462 463 __END_NAMESPACE_STD 464 465 #ifdef __USE_ISOC99 466 __BEGIN_NAMESPACE_C99 467 /* Read formatted input from S into argument list ARG. 468 469 This function is a possible cancellation point and therefore not 470 marked with __THROW. */ 471 extern int vfscanf (FILE *__restrict __s, const char *__restrict __format, 472 _G_va_list __arg) 473 __attribute__ ((__format__ (__scanf__, 2, 0))) __wur; 474 475 /* Read formatted input from stdin into argument list ARG. 476 477 This function is a possible cancellation point and therefore not 478 marked with __THROW. */ 479 extern int vscanf (const char *__restrict __format, _G_va_list __arg) 480 __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; 481 482 /* Read formatted input from S into argument list ARG. */ 483 extern int vsscanf (const char *__restrict __s, 484 const char *__restrict __format, _G_va_list __arg) 485 __THROW __attribute__ ((__format__ (__scanf__, 2, 0))); 486 487 # if !defined __USE_GNU \ 488 && (!defined __LDBL_COMPAT || !defined __REDIRECT) \ 489 && (defined __STRICT_ANSI__ || defined __USE_XOPEN2K) 490 # ifdef __REDIRECT 491 /* For strict ISO C99 or POSIX compliance disallow %as, %aS and %a[ 492 GNU extension which conflicts with valid %a followed by letter 493 s, S or [. */ 494 extern int __REDIRECT (vfscanf, 495 (FILE *__restrict __s, 496 const char *__restrict __format, _G_va_list __arg), 497 __isoc99_vfscanf) 498 __attribute__ ((__format__ (__scanf__, 2, 0))) __wur; 499 extern int __REDIRECT (vscanf, (const char *__restrict __format, 500 _G_va_list __arg), __isoc99_vscanf) 501 __attribute__ ((__format__ (__scanf__, 1, 0))) __wur; 502 extern int __REDIRECT_NTH (vsscanf, 503 (const char *__restrict __s, 504 const char *__restrict __format, 505 _G_va_list __arg), __isoc99_vsscanf) 506 __attribute__ ((__format__ (__scanf__, 2, 0))); 507 # else 508 extern int __isoc99_vfscanf (FILE *__restrict __s, 509 const char *__restrict __format, 510 _G_va_list __arg) __wur; 511 extern int __isoc99_vscanf (const char *__restrict __format, 512 _G_va_list __arg) __wur; 513 extern int __isoc99_vsscanf (const char *__restrict __s, 514 const char *__restrict __format, 515 _G_va_list __arg) __THROW; 516 # define vfscanf __isoc99_vfscanf 517 # define vscanf __isoc99_vscanf 518 # define vsscanf __isoc99_vsscanf 519 # endif 520 # endif 521 522 __END_NAMESPACE_C99 523 #endif /* Use ISO C9x. */ 524 525 526 __BEGIN_NAMESPACE_STD 527 /* Read a character from STREAM. 528 529 These functions are possible cancellation points and therefore not 530 marked with __THROW. */ 531 extern int fgetc (FILE *__stream); 532 extern int getc (FILE *__stream); 533 534 /* Read a character from stdin. 535 536 This function is a possible cancellation point and therefore not 537 marked with __THROW. */ 538 extern int getchar (void); 539 __END_NAMESPACE_STD 540 541 /* The C standard explicitly says this is a macro, so we always do the 542 optimization for it. */ 543 #define getc(_fp) _IO_getc (_fp) 544 545 #ifdef __USE_POSIX 546 /* These are defined in POSIX.1:1996. 547 548 These functions are possible cancellation points and therefore not 549 marked with __THROW. */ 550 extern int getc_unlocked (FILE *__stream); 551 extern int getchar_unlocked (void); 552 #endif /* Use POSIX. */ 553 554 #ifdef __USE_MISC 555 /* Faster version when locking is not necessary. 556 557 This function is not part of POSIX and therefore no official 558 cancellation point. But due to similarity with an POSIX interface 559 or due to the implementation it is a cancellation point and 560 therefore not marked with __THROW. */ 561 extern int fgetc_unlocked (FILE *__stream); 562 #endif /* Use MISC. */ 563 564 565 __BEGIN_NAMESPACE_STD 566 /* Write a character to STREAM. 567 568 These functions are possible cancellation points and therefore not 569 marked with __THROW. 570 571 These functions is a possible cancellation point and therefore not 572 marked with __THROW. */ 573 extern int fputc (int __c, FILE *__stream); 574 extern int putc (int __c, FILE *__stream); 575 576 /* Write a character to stdout. 577 578 This function is a possible cancellation point and therefore not 579 marked with __THROW. */ 580 extern int putchar (int __c); 581 __END_NAMESPACE_STD 582 583 /* The C standard explicitly says this can be a macro, 584 so we always do the optimization for it. */ 585 #define putc(_ch, _fp) _IO_putc (_ch, _fp) 586 587 #ifdef __USE_MISC 588 /* Faster version when locking is not necessary. 589 590 This function is not part of POSIX and therefore no official 591 cancellation point. But due to similarity with an POSIX interface 592 or due to the implementation it is a cancellation point and 593 therefore not marked with __THROW. */ 594 extern int fputc_unlocked (int __c, FILE *__stream); 595 #endif /* Use MISC. */ 596 597 #ifdef __USE_POSIX 598 /* These are defined in POSIX.1:1996. 599 600 These functions are possible cancellation points and therefore not 601 marked with __THROW. */ 602 extern int putc_unlocked (int __c, FILE *__stream); 603 extern int putchar_unlocked (int __c); 604 #endif /* Use POSIX. */ 605 606 607 #if defined __USE_MISC \ 608 || (defined __USE_XOPEN && !defined __USE_XOPEN2K) 609 /* Get a word (int) from STREAM. */ 610 extern int getw (FILE *__stream); 611 612 /* Write a word (int) to STREAM. */ 613 extern int putw (int __w, FILE *__stream); 614 #endif 615 616 617 __BEGIN_NAMESPACE_STD 618 /* Get a newline-terminated string of finite length from STREAM. 619 620 This function is a possible cancellation point and therefore not 621 marked with __THROW. */ 622 extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream) 623 __wur; 624 625 #if !defined __USE_ISOC11 \ 626 || (defined __cplusplus && __cplusplus <= 201103L) 627 /* Get a newline-terminated string from stdin, removing the newline. 628 DO NOT USE THIS FUNCTION!! There is no limit on how much it will read. 629 630 The function has been officially removed in ISO C11. This opportunity 631 is used to also remove it from the GNU feature list. It is now only 632 available when explicitly using an old ISO C, Unix, or POSIX standard. 633 GCC defines _GNU_SOURCE when building C++ code and the function is still 634 in C++11, so it is also available for C++. 635 636 This function is a possible cancellation point and therefore not 637 marked with __THROW. */ 638 extern char *gets (char *__s) __wur __attribute_deprecated__; 639 #endif 640 __END_NAMESPACE_STD 641 642 #ifdef __USE_GNU 643 /* This function does the same as `fgets' but does not lock the stream. 644 645 This function is not part of POSIX and therefore no official 646 cancellation point. But due to similarity with an POSIX interface 647 or due to the implementation it is a cancellation point and 648 therefore not marked with __THROW. */ 649 extern char *fgets_unlocked (char *__restrict __s, int __n, 650 FILE *__restrict __stream) __wur; 651 #endif 652 653 654 #ifdef __USE_XOPEN2K8 655 /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR 656 (and null-terminate it). *LINEPTR is a pointer returned from malloc (or 657 NULL), pointing to *N characters of space. It is realloc'd as 658 necessary. Returns the number of characters read (not including the 659 null terminator), or -1 on error or EOF. 660 661 These functions are not part of POSIX and therefore no official 662 cancellation point. But due to similarity with an POSIX interface 663 or due to the implementation they are cancellation points and 664 therefore not marked with __THROW. */ 665 extern _IO_ssize_t __getdelim (char **__restrict __lineptr, 666 size_t *__restrict __n, int __delimiter, 667 FILE *__restrict __stream) __wur; 668 extern _IO_ssize_t getdelim (char **__restrict __lineptr, 669 size_t *__restrict __n, int __delimiter, 670 FILE *__restrict __stream) __wur; 671 672 /* Like `getdelim', but reads up to a newline. 673 674 This function is not part of POSIX and therefore no official 675 cancellation point. But due to similarity with an POSIX interface 676 or due to the implementation it is a cancellation point and 677 therefore not marked with __THROW. */ 678 extern _IO_ssize_t getline (char **__restrict __lineptr, 679 size_t *__restrict __n, 680 FILE *__restrict __stream) __wur; 681 #endif 682 683 684 __BEGIN_NAMESPACE_STD 685 /* Write a string to STREAM. 686 687 This function is a possible cancellation point and therefore not 688 marked with __THROW. */ 689 extern int fputs (const char *__restrict __s, FILE *__restrict __stream); 690 691 /* Write a string, followed by a newline, to stdout. 692 693 This function is a possible cancellation point and therefore not 694 marked with __THROW. */ 695 extern int puts (const char *__s); 696 697 698 /* Push a character back onto the input buffer of STREAM. 699 700 This function is a possible cancellation point and therefore not 701 marked with __THROW. */ 702 extern int ungetc (int __c, FILE *__stream); 703 704 705 /* Read chunks of generic data from STREAM. 706 707 This function is a possible cancellation point and therefore not 708 marked with __THROW. */ 709 extern size_t fread (void *__restrict __ptr, size_t __size, 710 size_t __n, FILE *__restrict __stream) __wur; 711 /* Write chunks of generic data to STREAM. 712 713 This function is a possible cancellation point and therefore not 714 marked with __THROW. */ 715 extern size_t fwrite (const void *__restrict __ptr, size_t __size, 716 size_t __n, FILE *__restrict __s); 717 __END_NAMESPACE_STD 718 719 #ifdef __USE_GNU 720 /* This function does the same as `fputs' but does not lock the stream. 721 722 This function is not part of POSIX and therefore no official 723 cancellation point. But due to similarity with an POSIX interface 724 or due to the implementation it is a cancellation point and 725 therefore not marked with __THROW. */ 726 extern int fputs_unlocked (const char *__restrict __s, 727 FILE *__restrict __stream); 728 #endif 729 730 #ifdef __USE_MISC 731 /* Faster versions when locking is not necessary. 732 733 These functions are not part of POSIX and therefore no official 734 cancellation point. But due to similarity with an POSIX interface 735 or due to the implementation they are cancellation points and 736 therefore not marked with __THROW. */ 737 extern size_t fread_unlocked (void *__restrict __ptr, size_t __size, 738 size_t __n, FILE *__restrict __stream) __wur; 739 extern size_t fwrite_unlocked (const void *__restrict __ptr, size_t __size, 740 size_t __n, FILE *__restrict __stream); 741 #endif 742 743 744 __BEGIN_NAMESPACE_STD 745 /* Seek to a certain position on STREAM. 746 747 This function is a possible cancellation point and therefore not 748 marked with __THROW. */ 749 extern int fseek (FILE *__stream, long int __off, int __whence); 750 /* Return the current position of STREAM. 751 752 This function is a possible cancellation point and therefore not 753 marked with __THROW. */ 754 extern long int ftell (FILE *__stream) __wur; 755 /* Rewind to the beginning of STREAM. 756 757 This function is a possible cancellation point and therefore not 758 marked with __THROW. */ 759 extern void rewind (FILE *__stream); 760 __END_NAMESPACE_STD 761 762 /* The Single Unix Specification, Version 2, specifies an alternative, 763 more adequate interface for the two functions above which deal with 764 file offset. `long int' is not the right type. These definitions 765 are originally defined in the Large File Support API. */ 766 767 #if defined __USE_LARGEFILE || defined __USE_XOPEN2K 768 # ifndef __USE_FILE_OFFSET64 769 /* Seek to a certain position on STREAM. 770 771 This function is a possible cancellation point and therefore not 772 marked with __THROW. */ 773 extern int fseeko (FILE *__stream, __off_t __off, int __whence); 774 /* Return the current position of STREAM. 775 776 This function is a possible cancellation point and therefore not 777 marked with __THROW. */ 778 extern __off_t ftello (FILE *__stream) __wur; 779 # else 780 # ifdef __REDIRECT 781 extern int __REDIRECT (fseeko, 782 (FILE *__stream, __off64_t __off, int __whence), 783 fseeko64); 784 extern __off64_t __REDIRECT (ftello, (FILE *__stream), ftello64); 785 # else 786 # define fseeko fseeko64 787 # define ftello ftello64 788 # endif 789 # endif 790 #endif 791 792 __BEGIN_NAMESPACE_STD 793 #ifndef __USE_FILE_OFFSET64 794 /* Get STREAM's position. 795 796 This function is a possible cancellation point and therefore not 797 marked with __THROW. */ 798 extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos); 799 /* Set STREAM's position. 800 801 This function is a possible cancellation point and therefore not 802 marked with __THROW. */ 803 extern int fsetpos (FILE *__stream, const fpos_t *__pos); 804 #else 805 # ifdef __REDIRECT 806 extern int __REDIRECT (fgetpos, (FILE *__restrict __stream, 807 fpos_t *__restrict __pos), fgetpos64); 808 extern int __REDIRECT (fsetpos, 809 (FILE *__stream, const fpos_t *__pos), fsetpos64); 810 # else 811 # define fgetpos fgetpos64 812 # define fsetpos fsetpos64 813 # endif 814 #endif 815 __END_NAMESPACE_STD 816 817 #ifdef __USE_LARGEFILE64 818 extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence); 819 extern __off64_t ftello64 (FILE *__stream) __wur; 820 extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos); 821 extern int fsetpos64 (FILE *__stream, const fpos64_t *__pos); 822 #endif 823 824 __BEGIN_NAMESPACE_STD 825 /* Clear the error and EOF indicators for STREAM. */ 826 extern void clearerr (FILE *__stream) __THROW; 827 /* Return the EOF indicator for STREAM. */ 828 extern int feof (FILE *__stream) __THROW __wur; 829 /* Return the error indicator for STREAM. */ 830 extern int ferror (FILE *__stream) __THROW __wur; 831 __END_NAMESPACE_STD 832 833 #ifdef __USE_MISC 834 /* Faster versions when locking is not required. */ 835 extern void clearerr_unlocked (FILE *__stream) __THROW; 836 extern int feof_unlocked (FILE *__stream) __THROW __wur; 837 extern int ferror_unlocked (FILE *__stream) __THROW __wur; 838 #endif 839 840 841 __BEGIN_NAMESPACE_STD 842 /* Print a message describing the meaning of the value of errno. 843 844 This function is a possible cancellation point and therefore not 845 marked with __THROW. */ 846 extern void perror (const char *__s); 847 __END_NAMESPACE_STD 848 849 /* Provide the declarations for `sys_errlist' and `sys_nerr' if they 850 are available on this system. Even if available, these variables 851 should not be used directly. The `strerror' function provides 852 all the necessary functionality. */ 853 #include <bits/sys_errlist.h> 854 855 856 #ifdef __USE_POSIX 857 /* Return the system file descriptor for STREAM. */ 858 extern int fileno (FILE *__stream) __THROW __wur; 859 #endif /* Use POSIX. */ 860 861 #ifdef __USE_MISC 862 /* Faster version when locking is not required. */ 863 extern int fileno_unlocked (FILE *__stream) __THROW __wur; 864 #endif 865 866 867 #ifdef __USE_POSIX2 868 /* Create a new stream connected to a pipe running the given command. 869 870 This function is a possible cancellation point and therefore not 871 marked with __THROW. */ 872 extern FILE *popen (const char *__command, const char *__modes) __wur; 873 874 /* Close a stream opened by popen and return the status of its child. 875 876 This function is a possible cancellation point and therefore not 877 marked with __THROW. */ 878 extern int pclose (FILE *__stream); 879 #endif 880 881 882 #ifdef __USE_POSIX 883 /* Return the name of the controlling terminal. */ 884 extern char *ctermid (char *__s) __THROW; 885 #endif /* Use POSIX. */ 886 887 888 #ifdef __USE_XOPEN 889 /* Return the name of the current user. */ 890 extern char *cuserid (char *__s); 891 #endif /* Use X/Open, but not issue 6. */ 892 893 894 #ifdef __USE_GNU 895 struct obstack; /* See <obstack.h>. */ 896 897 /* Write formatted output to an obstack. */ 898 extern int obstack_printf (struct obstack *__restrict __obstack, 899 const char *__restrict __format, ...) 900 __THROWNL __attribute__ ((__format__ (__printf__, 2, 3))); 901 extern int obstack_vprintf (struct obstack *__restrict __obstack, 902 const char *__restrict __format, 903 _G_va_list __args) 904 __THROWNL __attribute__ ((__format__ (__printf__, 2, 0))); 905 #endif /* Use GNU. */ 906 907 908 #ifdef __USE_POSIX 909 /* These are defined in POSIX.1:1996. */ 910 911 /* Acquire ownership of STREAM. */ 912 extern void flockfile (FILE *__stream) __THROW; 913 914 /* Try to acquire ownership of STREAM but do not block if it is not 915 possible. */ 916 extern int ftrylockfile (FILE *__stream) __THROW __wur; 917 918 /* Relinquish the ownership granted for STREAM. */ 919 extern void funlockfile (FILE *__stream) __THROW; 920 #endif /* POSIX */ 921 922 #if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU 923 /* The X/Open standard requires some functions and variables to be 924 declared here which do not belong into this header. But we have to 925 follow. In GNU mode we don't do this nonsense. */ 926 # define __need_getopt 927 # include <getopt.h> 928 #endif /* X/Open, but not issue 6 and not for GNU. */ 929 930 /* If we are compiling with optimizing read this file. It contains 931 several optimizing inline functions and macros. */ 932 #ifdef __USE_EXTERN_INLINES 933 # include <bits/stdio.h> 934 #endif 935 #if __USE_FORTIFY_LEVEL > 0 && defined __fortify_function 936 # include <bits/stdio2.h> 937 #endif 938 #ifdef __LDBL_COMPAT 939 # include <bits/stdio-ldbl.h> 940 #endif 941 942 __END_DECLS 943 944 #endif /* <stdio.h> included. */ 945 946 #endif /* !_STDIO_H */ 947