File: /usr/include/stdio.h

1     /* Define ISO C stdio on top of C++ iostreams.
2        Copyright (C) 1991, 1994-1999, 2000, 2001 Free Software Foundation, Inc.
3     
4        The GNU C Library is free software; you can redistribute it and/or
5        modify it under the terms of the GNU Library General Public License as
6        published by the Free Software Foundation; either version 2 of the
7        License, or (at your option) any later version.
8     
9        The GNU C Library is distributed in the hope that it will be useful,
10        but WITHOUT ANY WARRANTY; without even the implied warranty of
11        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12        Library General Public License for more details.
13     
14        You should have received a copy of the GNU Library General Public
15        License along with the GNU C Library; see the file COPYING.LIB.  If not,
16        write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17        Boston, MA 02111-1307, USA.  */
18     
19     /*
20      *	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     /* The opaque type of streams.  This is the definition used elsewhere.  */
44     typedef struct _IO_FILE FILE;
45     
46     # define __FILE_defined	1
47     #endif /* FILE not defined.  */
48     #undef	__need_FILE
49     
50     
51     #if !defined ____FILE_defined && defined __need___FILE
52     
53     /* The opaque type of streams.  This is the definition used elsewhere.  */
54     typedef struct _IO_FILE __FILE;
55     
56     # define ____FILE_defined	1
57     #endif /* __FILE not defined.  */
58     #undef	__need___FILE
59     
60     
61     #ifdef	_STDIO_H
62     #define _STDIO_USES_IOSTREAM
63     
64     #include <libio.h>
65     
66     #ifdef __USE_XOPEN
67     # ifdef __GNUC__
68     #  ifndef _VA_LIST_DEFINED
69     typedef _G_va_list va_list;
70     #   define _VA_LIST_DEFINED
71     #  endif
72     # else
73     #  include <stdarg.h>
74     # endif
75     #endif
76     
77     /* The type of the second argument to `fgetpos' and `fsetpos'.  */
78     #ifndef __USE_FILE_OFFSET64
79     typedef _G_fpos_t fpos_t;
80     #else
81     typedef _G_fpos64_t fpos_t;
82     #endif
83     #ifdef __USE_LARGEFILE64
84     typedef _G_fpos64_t fpos64_t;
85     #endif
86     
87     /* The possibilities for the third argument to `setvbuf'.  */
88     #define _IOFBF 0 		/* Fully buffered.  */
89     #define _IOLBF 1		/* Line buffered.  */
90     #define _IONBF 2		/* No buffering.  */
91     
92     
93     /* Default buffer size.  */
94     #ifndef BUFSIZ
95     # define BUFSIZ _IO_BUFSIZ
96     #endif
97     
98     
99     /* End of file character.
100        Some things throughout the library rely on this being -1.  */
101     #ifndef EOF
102     # define EOF (-1)
103     #endif
104     
105     
106     /* The possibilities for the third argument to `fseek'.
107        These values should not be changed.  */
108     #define SEEK_SET	0	/* Seek from beginning of file.  */
109     #define SEEK_CUR	1	/* Seek from current position.  */
110     #define SEEK_END	2	/* Seek from end of file.  */
111     
112     
113     #if defined __USE_SVID || defined __USE_XOPEN
114     /* Default path prefix for `tempnam' and `tmpnam'.  */
115     # define P_tmpdir	"/tmp"
116     #endif
117     
118     
119     /* Get the values:
120        L_tmpnam	How long an array of chars must be to be passed to `tmpnam'.
121        TMP_MAX	The minimum number of unique filenames generated by tmpnam
122        		(and tempnam when it uses tmpnam's name space),
123     		or tempnam (the two are separate).
124        L_ctermid	How long an array to pass to `ctermid'.
125        L_cuserid	How long an array to pass to `cuserid'.
126        FOPEN_MAX	Minimum number of files that can be open at once.
127        FILENAME_MAX	Maximum length of a filename.  */
128     #include <bits/stdio_lim.h>
129     
130     
131     /* Standard streams.  */
132     extern FILE *stdin;		/* Standard input stream.  */
133     extern FILE *stdout;		/* Standard output stream.  */
134     extern FILE *stderr;		/* Standard error output stream.  */
135     #ifdef __STDC__
136     /* C89/C99 say they're macros.  Make them happy.  */
137     #define stdin stdin
138     #define stdout stdout
139     #define stderr stderr
140     #endif
141     
142     /* Remove file FILENAME.  */
143     extern int remove (__const char *__filename) __THROW;
144     /* Rename file OLD to NEW.  */
145     extern int rename (__const char *__old, __const char *__new) __THROW;
146     
147     
148     /* Create a temporary file and open it read/write.  */
149     #ifndef __USE_FILE_OFFSET64
150     extern FILE *tmpfile (void) __THROW;
151     #else
152     # ifdef __REDIRECT
153     extern FILE *__REDIRECT (tmpfile, (void) __THROW, tmpfile64);
154     # else
155     #  define tmpfile tmpfile64
156     # endif
157     #endif
158     #ifdef __USE_LARGEFILE64
159     extern FILE *tmpfile64 (void) __THROW;
160     #endif
161     /* Generate a temporary filename.  */
162     extern char *tmpnam (char *__s) __THROW;
163     
164     #ifdef __USE_MISC
165     /* This is the reentrant variant of `tmpnam'.  The only difference is
166        that it does not allow S to be NULL.  */
167     extern char *tmpnam_r (char *__s) __THROW;
168     #endif
169     
170     
171     #if defined __USE_SVID || defined __USE_XOPEN
172     /* Generate a unique temporary filename using up to five characters of PFX
173        if it is not NULL.  The directory to put this file in is searched for
174        as follows: First the environment variable "TMPDIR" is checked.
175        If it contains the name of a writable directory, that directory is used.
176        If not and if DIR is not NULL, that value is checked.  If that fails,
177        P_tmpdir is tried and finally "/tmp".  The storage for the filename
178        is allocated by `malloc'.  */
179     extern char *tempnam (__const char *__dir, __const char *__pfx)
180          __THROW __attribute_malloc__;
181     #endif
182     
183     
184     /* Close STREAM.  */
185     extern int fclose (FILE *__stream) __THROW;
186     /* Flush STREAM, or all streams if STREAM is NULL.  */
187     extern int fflush (FILE *__stream) __THROW;
188     
189     #ifdef __USE_MISC
190     /* Faster versions when locking is not required.  */
191     extern int fflush_unlocked (FILE *__stream) __THROW;
192     #endif
193     
194     #ifdef __USE_GNU
195     /* Close all streams.  */
196     extern int fcloseall (void) __THROW;
197     #endif
198     
199     
200     #ifndef __USE_FILE_OFFSET64
201     /* Open a file and create a new stream for it.  */
202     extern FILE *fopen (__const char *__restrict __filename,
203     		    __const char *__restrict __modes) __THROW;
204     /* Open a file, replacing an existing stream with it. */
205     extern FILE *freopen (__const char *__restrict __filename,
206     		      __const char *__restrict __modes,
207     		      FILE *__restrict __stream) __THROW;
208     #else
209     # ifdef __REDIRECT
210     extern FILE *__REDIRECT (fopen, (__const char *__restrict __filename,
211     				 __const char *__restrict __modes) __THROW,
212     			 fopen64);
213     extern FILE *__REDIRECT (freopen, (__const char *__restrict __filename,
214     				   __const char *__restrict __modes,
215     				   FILE *__restrict __stream) __THROW,
216     			 freopen64);
217     # else
218     #  define fopen fopen64
219     #  define freopen freopen64
220     # endif
221     #endif
222     #ifdef __USE_LARGEFILE64
223     extern FILE *fopen64 (__const char *__restrict __filename,
224     		      __const char *__restrict __modes) __THROW;
225     extern FILE *freopen64 (__const char *__restrict __filename,
226     			__const char *__restrict __modes,
227     			FILE *__restrict __stream) __THROW;
228     #endif
229     
230     #ifdef	__USE_POSIX
231     /* Create a new stream that refers to an existing system file descriptor.  */
232     extern FILE *fdopen (int __fd, __const char *__modes) __THROW;
233     #endif
234     
235     #ifdef	__USE_GNU
236     /* Create a new stream that refers to the given magic cookie,
237        and uses the given functions for input and output.  */
238     extern FILE *fopencookie (void *__restrict __magic_cookie,
239     			  __const char *__restrict __modes,
240     			  _IO_cookie_io_functions_t __io_funcs) __THROW;
241     
242     /* Create a new stream that refers to a memory buffer.  */
243     extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) __THROW;
244     
245     /* Open a stream that writes into a malloc'd buffer that is expanded as
246        necessary.  *BUFLOC and *SIZELOC are updated with the buffer's location
247        and the number of characters written on fflush or fclose.  */
248     extern FILE *open_memstream (char **__restrict __bufloc,
249     			     size_t *__restrict __sizeloc) __THROW;
250     #endif
251     
252     
253     /* If BUF is NULL, make STREAM unbuffered.
254        Else make it use buffer BUF, of size BUFSIZ.  */
255     extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) __THROW;
256     /* Make STREAM use buffering mode MODE.
257        If BUF is not NULL, use N bytes of it for buffering;
258        else allocate an internal buffer N bytes long.  */
259     extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
260     		    int __modes, size_t __n) __THROW;
261     
262     #ifdef	__USE_BSD
263     /* If BUF is NULL, make STREAM unbuffered.
264        Else make it use SIZE bytes of BUF for buffering.  */
265     extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
266     		       size_t __size) __THROW;
267     
268     /* Make STREAM line-buffered.  */
269     extern void setlinebuf (FILE *__stream) __THROW;
270     #endif
271     
272     
273     /* Write formatted output to STREAM.  */
274     extern int fprintf (FILE *__restrict __stream,
275     		    __const char *__restrict __format, ...) __THROW;
276     /* Write formatted output to stdout.  */
277     extern int printf (__const char *__restrict __format, ...) __THROW;
278     /* Write formatted output to S.  */
279     extern int sprintf (char *__restrict __s,
280     		    __const char *__restrict __format, ...) __THROW;
281     
282     /* Write formatted output to S from argument list ARG.  */
283     extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
284     		     _G_va_list __arg) __THROW;
285     /* Write formatted output to stdout from argument list ARG.  */
286     extern int vprintf (__const char *__restrict __format, _G_va_list __arg)
287          __THROW;
288     /* Write formatted output to S from argument list ARG.  */
289     extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
290     		     _G_va_list __arg) __THROW;
291     
292     #if defined __USE_BSD || defined __USE_ISOC99 || defined __USE_UNIX98
293     /* Maximum chars of output to write in MAXLEN.  */
294     extern int snprintf (char *__restrict __s, size_t __maxlen,
295     		     __const char *__restrict __format, ...)
296          __THROW __attribute__ ((__format__ (__printf__, 3, 4)));
297     
298     extern int vsnprintf (char *__restrict __s, size_t __maxlen,
299     		      __const char *__restrict __format, _G_va_list __arg)
300          __THROW __attribute__ ((__format__ (__printf__, 3, 0)));
301     #endif
302     
303     #ifdef __USE_GNU
304     /* Write formatted output to a string dynamically allocated with `malloc'.
305        Store the address of the string in *PTR.  */
306     extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
307     		      _G_va_list __arg)
308          __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
309     extern int __asprintf (char **__restrict __ptr,
310     		       __const char *__restrict __fmt, ...)
311          __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
312     extern int asprintf (char **__restrict __ptr,
313     		     __const char *__restrict __fmt, ...)
314          __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
315     
316     /* Write formatted output to a file descriptor.  */
317     extern int vdprintf (int __fd, __const char *__restrict __fmt,
318     		     _G_va_list __arg)
319          __THROW __attribute__ ((__format__ (__printf__, 2, 0)));
320     extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
321          __THROW __attribute__ ((__format__ (__printf__, 2, 3)));
322     #endif
323     
324     
325     /* Read formatted input from STREAM.  */
326     extern int fscanf (FILE *__restrict __stream,
327     		   __const char *__restrict __format, ...) __THROW;
328     /* Read formatted input from stdin.  */
329     extern int scanf (__const char *__restrict __format, ...) __THROW;
330     /* Read formatted input from S.  */
331     extern int sscanf (__const char *__restrict __s,
332     		   __const char *__restrict __format, ...) __THROW;
333     
334     #ifdef	__USE_ISOC99
335     /* Read formatted input from S into argument list ARG.  */
336     extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
337     		    _G_va_list __arg)
338          __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
339     
340     /* Read formatted input from stdin into argument list ARG.  */
341     extern int vscanf (__const char *__restrict __format, _G_va_list __arg)
342          __THROW __attribute__ ((__format__ (__scanf__, 1, 0)));
343     
344     /* Read formatted input from S into argument list ARG.  */
345     extern int vsscanf (__const char *__restrict __s,
346     		    __const char *__restrict __format, _G_va_list __arg)
347          __THROW __attribute__ ((__format__ (__scanf__, 2, 0)));
348     #endif /* Use ISO C9x.  */
349     
350     
351     /* Read a character from STREAM.  */
352     extern int fgetc (FILE *__stream) __THROW;
353     extern int getc (FILE *__stream) __THROW;
354     
355     /* Read a character from stdin.  */
356     extern int getchar (void) __THROW;
357     
358     /* The C standard explicitly says this is a macro, so we always do the
359        optimization for it.  */
360     #define getc(_fp) _IO_getc (_fp)
361     
362     #if defined __USE_POSIX || defined __USE_MISC
363     /* These are defined in POSIX.1:1996.  */
364     extern int getc_unlocked (FILE *__stream) __THROW;
365     extern int getchar_unlocked (void) __THROW;
366     #endif /* Use POSIX or MISC.  */
367     
368     #ifdef __USE_MISC
369     /* Faster version when locking is not necessary.  */
370     extern int fgetc_unlocked (FILE *__stream) __THROW;
371     #endif /* Use MISC.  */
372     
373     
374     /* Write a character to STREAM.  */
375     extern int fputc (int __c, FILE *__stream) __THROW;
376     extern int putc (int __c, FILE *__stream) __THROW;
377     
378     /* Write a character to stdout.  */
379     extern int putchar (int __c) __THROW;
380     
381     /* The C standard explicitly says this can be a macro,
382        so we always do the optimization for it.  */
383     #define putc(_ch, _fp) _IO_putc (_ch, _fp)
384     
385     #ifdef __USE_MISC
386     /* Faster version when locking is not necessary.  */
387     extern int fputc_unlocked (int __c, FILE *__stream) __THROW;
388     #endif /* Use MISC.  */
389     
390     #if defined __USE_POSIX || defined __USE_MISC
391     /* These are defined in POSIX.1:1996.  */
392     extern int putc_unlocked (int __c, FILE *__stream) __THROW;
393     extern int putchar_unlocked (int __c) __THROW;
394     #endif /* Use POSIX or MISC.  */
395     
396     
397     #if defined __USE_SVID || defined __USE_MISC || defined __USE_XOPEN
398     /* Get a word (int) from STREAM.  */
399     extern int getw (FILE *__stream) __THROW;
400     
401     /* Write a word (int) to STREAM.  */
402     extern int putw (int __w, FILE *__stream) __THROW;
403     #endif
404     
405     
406     /* Get a newline-terminated string of finite length from STREAM.  */
407     extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
408          __THROW;
409     
410     #ifdef __USE_GNU
411     /* This function does the same as `fgets' but does not lock the stream.  */
412     extern char *fgets_unlocked (char *__restrict __s, int __n,
413     			     FILE *__restrict __stream) __THROW;
414     #endif
415     
416     /* Get a newline-terminated string from stdin, removing the newline.
417        DO NOT USE THIS FUNCTION!!  There is no limit on how much it will read.  */
418     extern char *gets (char *__s) __THROW;
419     
420     
421     #ifdef	__USE_GNU
422     /* Read up to (and including) a DELIMITER from STREAM into *LINEPTR
423        (and null-terminate it). *LINEPTR is a pointer returned from malloc (or
424        NULL), pointing to *N characters of space.  It is realloc'd as
425        necessary.  Returns the number of characters read (not including the
426        null terminator), or -1 on error or EOF.  */
427     extern _IO_ssize_t __getdelim (char **__restrict __lineptr,
428     			       size_t *__restrict __n, int __delimiter,
429     			       FILE *__restrict __stream) __THROW;
430     extern _IO_ssize_t getdelim (char **__restrict __lineptr,
431     			     size_t *__restrict __n, int __delimiter,
432     			     FILE *__restrict __stream) __THROW;
433     
434     /* Like `getdelim', but reads up to a newline.  */
435     extern _IO_ssize_t getline (char **__restrict __lineptr,
436     			    size_t *__restrict __n,
437     			    FILE *__restrict __stream) __THROW;
438     #endif
439     
440     
441     /* Write a string to STREAM.  */
442     extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
443          __THROW;
444     
445     #ifdef __USE_GNU
446     /* This function does the same as `fputs' but does not lock the stream.  */
447     extern int fputs_unlocked (__const char *__restrict __s,
448     			   FILE *__restrict __stream) __THROW;
449     #endif
450     
451     /* Write a string, followed by a newline, to stdout.  */
452     extern int puts (__const char *__s) __THROW;
453     
454     
455     /* Push a character back onto the input buffer of STREAM.  */
456     extern int ungetc (int __c, FILE *__stream) __THROW;
457     
458     
459     /* Read chunks of generic data from STREAM.  */
460     extern size_t fread (void *__restrict __ptr, size_t __size,
461     		     size_t __n, FILE *__restrict __stream) __THROW;
462     /* Write chunks of generic data to STREAM.  */
463     extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
464     		      size_t __n, FILE *__restrict __s) __THROW;
465     
466     #ifdef __USE_MISC
467     /* Faster versions when locking is not necessary.  */
468     extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
469     			      size_t __n, FILE *__restrict __stream) __THROW;
470     extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
471     			       size_t __n, FILE *__restrict __stream) __THROW;
472     #endif
473     
474     
475     /* Seek to a certain position on STREAM.  */
476     extern int fseek (FILE *__stream, long int __off, int __whence) __THROW;
477     /* Return the current position of STREAM.  */
478     extern long int ftell (FILE *__stream) __THROW;
479     /* Rewind to the beginning of STREAM.  */
480     extern void rewind (FILE *__stream) __THROW;
481     
482     /* The Single Unix Specification, Version 2, specifies an alternative,
483        more adequate interface for the two functions above which deal with
484        file offset.  `long int' is not the right type.  These definitions
485        are originally defined in the Large File Support API.  */
486     
487     #ifndef __USE_FILE_OFFSET64
488     # ifdef __USE_LARGEFILE
489     /* Seek to a certain position on STREAM.  */
490     extern int fseeko (FILE *__stream, __off_t __off, int __whence) __THROW;
491     /* Return the current position of STREAM.  */
492     extern __off_t ftello (FILE *__stream) __THROW;
493     # endif
494     
495     /* Get STREAM's position.  */
496     extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
497          __THROW;
498     /* Set STREAM's position.  */
499     extern int fsetpos (FILE *__stream, __const fpos_t *__pos) __THROW;
500     #else
501     # ifdef __REDIRECT
502     #  ifdef __USE_LARGEFILE
503     extern int __REDIRECT (fseeko,
504     		       (FILE *__stream, __off64_t __off, int __whence) __THROW,
505     		       fseeko64);
506     extern __off64_t __REDIRECT (ftello, (FILE *__stream) __THROW, ftello64);
507     #  endif
508     extern int __REDIRECT (fgetpos, (FILE *__restrict __stream,
509     				 fpos_t *__restrict __pos) __THROW, fgetpos64);
510     extern int __REDIRECT (fsetpos,
511     		       (FILE *__stream, __const fpos_t *__pos) __THROW,
512     		       fsetpos64);
513     # else
514     #  ifdef __USE_LARGEFILE
515     #   define fseeko fseeko64
516     #   define ftello ftello64
517     #  endif
518     #  define fgetpos fgetpos64
519     #  define fsetpos fsetpos64
520     # endif
521     #endif
522     
523     #ifdef __USE_LARGEFILE64
524     extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) __THROW;
525     extern __off64_t ftello64 (FILE *__stream) __THROW;
526     extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos)
527          __THROW;
528     extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos) __THROW;
529     #endif
530     
531     /* Clear the error and EOF indicators for STREAM.  */
532     extern void clearerr (FILE *__stream) __THROW;
533     /* Return the EOF indicator for STREAM.  */
534     extern int feof (FILE *__stream) __THROW;
535     /* Return the error indicator for STREAM.  */
536     extern int ferror (FILE *__stream) __THROW;
537     
538     #ifdef __USE_MISC
539     /* Faster versions when locking is not required.  */
540     extern void clearerr_unlocked (FILE *__stream) __THROW;
541     extern int feof_unlocked (FILE *__stream) __THROW;
542     extern int ferror_unlocked (FILE *__stream) __THROW;
543     #endif
544     
545     
546     /* Print a message describing the meaning of the value of errno.  */
547     extern void perror (__const char *__s) __THROW;
548     
549     /* These variables normally should not be used directly.  The `strerror'
550        function provides all the needed functionality.  */
551     #ifdef	__USE_BSD
552     extern int sys_nerr;
553     extern __const char *__const sys_errlist[];
554     #endif
555     #ifdef	__USE_GNU
556     extern int _sys_nerr;
557     extern __const char *__const _sys_errlist[];
558     #endif
559     
560     
561     #ifdef	__USE_POSIX
562     /* Return the system file descriptor for STREAM.  */
563     extern int fileno (FILE *__stream) __THROW;
564     #endif /* Use POSIX.  */
565     
566     #ifdef __USE_MISC
567     /* Faster version when locking is not required.  */
568     extern int fileno_unlocked (FILE *__stream) __THROW;
569     #endif
570     
571     
572     #if (defined __USE_POSIX2 || defined __USE_SVID  || defined __USE_BSD || \
573          defined __USE_MISC)
574     /* Create a new stream connected to a pipe running the given command.  */
575     extern FILE *popen (__const char *__command, __const char *__modes) __THROW;
576     
577     /* Close a stream opened by popen and return the status of its child.  */
578     extern int pclose (FILE *__stream) __THROW;
579     #endif
580     
581     
582     #ifdef	__USE_POSIX
583     /* Return the name of the controlling terminal.  */
584     extern char *ctermid (char *__s) __THROW;
585     #endif /* Use POSIX.  */
586     
587     
588     #ifdef __USE_XOPEN
589     /* Return the name of the current user.  */
590     extern char *cuserid (char *__s) __THROW;
591     #endif /* Use X/Open, but not issue 6.  */
592     
593     
594     #ifdef	__USE_GNU
595     struct obstack;			/* See <obstack.h>.  */
596     
597     /* Write formatted output to an obstack.  */
598     extern int obstack_printf (struct obstack *__restrict __obstack,
599     			   __const char *__restrict __format, ...) __THROW;
600     extern int obstack_vprintf (struct obstack *__restrict __obstack,
601     			    __const char *__restrict __format,
602     			    _G_va_list __args) __THROW;
603     #endif /* Use GNU.  */
604     
605     
606     #if defined __USE_POSIX || defined __USE_MISC
607     /* These are defined in POSIX.1:1996.  */
608     
609     /* Acquire ownership of STREAM.  */
610     extern void flockfile (FILE *__stream) __THROW;
611     
612     /* Try to acquire ownership of STREAM but do not block if it is not
613        possible.  */
614     extern int ftrylockfile (FILE *__stream) __THROW;
615     
616     /* Relinquish the ownership granted for STREAM.  */
617     extern void funlockfile (FILE *__stream) __THROW;
618     #endif /* POSIX || misc */
619     
620     #if defined __USE_XOPEN && !defined __USE_XOPEN2K && !defined __USE_GNU
621     /* The X/Open standard requires some functions and variables to be
622        declared here which do not belong into this header.  But we have to
623        follow.  In GNU mode we don't do this nonsense.  */
624     # define __need_getopt
625     # include <getopt.h>
626     #endif	/* X/Open, but not issue 6 and not for GNU.  */
627     
628     /* If we are compiling with optimizing read this file.  It contains
629        several optimizing inline functions and macros.  */
630     #ifdef __USE_EXTERN_INLINES
631     # include <bits/stdio.h>
632     #endif
633     
634     __END_DECLS
635     
636     #endif /* <stdio.h> included.  */
637     
638     #endif /* !_STDIO_H */
639