]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/stdio.texi
elf: Accept absolute (SHN_ABS) symbols whose value is zero [BZ #23307]
[thirdparty/glibc.git] / manual / stdio.texi
CommitLineData
28f540f4 1@node I/O on Streams, Low-Level I/O, I/O Overview, Top
34992338 2@c %MENU% High-level, portable I/O facilities
28f540f4 3@chapter Input/Output on Streams
838e5ffe
UD
4@c fix an overfull:
5@tex
6\hyphenation{which-ever}
7@end tex
28f540f4
RM
8
9This chapter describes the functions for creating streams and performing
10input and output operations on them. As discussed in @ref{I/O
11Overview}, a stream is a fairly abstract, high-level concept
12representing a communications channel to a file, device, or process.
13
14@menu
15* Streams:: About the data type representing a stream.
19c3f208 16* Standard Streams:: Streams to the standard input and output
162ba701 17 devices are created for you.
28f540f4
RM
18* Opening Streams:: How to create a stream to talk to a file.
19* Closing Streams:: Close a stream when you are finished with it.
7b4161bb 20* Streams and Threads:: Issues with streams in threaded programs.
b5e73f56 21* Streams and I18N:: Streams in internationalized applications.
28f540f4
RM
22* Simple Output:: Unformatted output by characters and lines.
23* Character Input:: Unformatted input by characters and words.
24* Line Input:: Reading a line or a record from a stream.
25* Unreading:: Peeking ahead/pushing back input just read.
26* Block Input/Output:: Input and output operations on blocks of data.
27* Formatted Output:: @code{printf} and related functions.
28* Customizing Printf:: You can define new conversion specifiers for
162ba701 29 @code{printf} and friends.
28f540f4
RM
30* Formatted Input:: @code{scanf} and related functions.
31* EOF and Errors:: How you can tell if an I/O error happens.
460e040a 32* Error Recovery:: What you can do about errors.
28f540f4 33* Binary Streams:: Some systems distinguish between text files
162ba701 34 and binary files.
28f540f4 35* File Positioning:: About random-access streams.
f65fd747 36* Portable Positioning:: Random access on peculiar ISO C systems.
28f540f4
RM
37* Stream Buffering:: How to control buffering of streams.
38* Other Kinds of Streams:: Streams that do not necessarily correspond
162ba701 39 to an open file.
0501d603 40* Formatted Messages:: Print strictly formatted messages.
28f540f4
RM
41@end menu
42
43@node Streams
44@section Streams
45
46For historical reasons, the type of the C data structure that represents
47a stream is called @code{FILE} rather than ``stream''. Since most of
48the library functions deal with objects of type @code{FILE *}, sometimes
49the term @dfn{file pointer} is also used to mean ``stream''. This leads
50to unfortunate confusion over terminology in many books on C. This
51manual, however, is careful to use the terms ``file'' and ``stream''
52only in the technical sense.
53@cindex file pointer
54
55@pindex stdio.h
56The @code{FILE} type is declared in the header file @file{stdio.h}.
57
28f540f4 58@deftp {Data Type} FILE
d08a7e4c 59@standards{ISO, stdio.h}
28f540f4
RM
60This is the data type used to represent stream objects. A @code{FILE}
61object holds all of the internal state information about the connection
62to the associated file, including such things as the file position
63indicator and buffering information. Each stream also has error and
64end-of-file status indicators that can be tested with the @code{ferror}
65and @code{feof} functions; see @ref{EOF and Errors}.
66@end deftp
67
68@code{FILE} objects are allocated and managed internally by the
69input/output library functions. Don't try to create your own objects of
70type @code{FILE}; let the library do it. Your programs should
71deal only with pointers to these objects (that is, @code{FILE *} values)
72rather than the objects themselves.
6d52618b 73@c !!! should say that FILE's have "No user-serviceable parts inside."
28f540f4
RM
74
75@node Standard Streams
76@section Standard Streams
77@cindex standard streams
78@cindex streams, standard
79
80When the @code{main} function of your program is invoked, it already has
81three predefined streams open and available for use. These represent
82the ``standard'' input and output channels that have been established
83for the process.
84
85These streams are declared in the header file @file{stdio.h}.
86@pindex stdio.h
87
28f540f4 88@deftypevar {FILE *} stdin
d08a7e4c 89@standards{ISO, stdio.h}
28f540f4
RM
90The @dfn{standard input} stream, which is the normal source of input for the
91program.
92@end deftypevar
93@cindex standard input stream
94
28f540f4 95@deftypevar {FILE *} stdout
d08a7e4c 96@standards{ISO, stdio.h}
28f540f4
RM
97The @dfn{standard output} stream, which is used for normal output from
98the program.
99@end deftypevar
100@cindex standard output stream
101
28f540f4 102@deftypevar {FILE *} stderr
d08a7e4c 103@standards{ISO, stdio.h}
28f540f4
RM
104The @dfn{standard error} stream, which is used for error messages and
105diagnostics issued by the program.
106@end deftypevar
107@cindex standard error stream
108
a7a93d50 109On @gnusystems{}, you can specify what files or processes correspond to
28f540f4
RM
110these streams using the pipe and redirection facilities provided by the
111shell. (The primitives shells use to implement these facilities are
112described in @ref{File System Interface}.) Most other operating systems
113provide similar mechanisms, but the details of how to use them can vary.
114
1f77f049 115In @theglibc{}, @code{stdin}, @code{stdout}, and @code{stderr} are
b5e73f56
UD
116normal variables which you can set just like any others. For example,
117to redirect the standard output to a file, you could do:
28f540f4
RM
118
119@smallexample
120fclose (stdout);
121stdout = fopen ("standard-output-file", "w");
122@end smallexample
123
124Note however, that in other systems @code{stdin}, @code{stdout}, and
125@code{stderr} are macros that you cannot assign to in the normal way.
126But you can use @code{freopen} to get the effect of closing one and
127reopening it. @xref{Opening Streams}.
128
b5e73f56
UD
129The three streams @code{stdin}, @code{stdout}, and @code{stderr} are not
130unoriented at program start (@pxref{Streams and I18N}).
131
28f540f4
RM
132@node Opening Streams
133@section Opening Streams
134
135@cindex opening a stream
136Opening a file with the @code{fopen} function creates a new stream and
137establishes a connection between the stream and a file. This may
19c3f208 138involve creating a new file.
28f540f4
RM
139
140@pindex stdio.h
141Everything described in this section is declared in the header file
142@file{stdio.h}.
143
28f540f4 144@deftypefun {FILE *} fopen (const char *@var{filename}, const char *@var{opentype})
d08a7e4c 145@standards{ISO, stdio.h}
171e9210
AO
146@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
147@c fopen may leak the list lock if cancelled within _IO_link_in.
28f540f4
RM
148The @code{fopen} function opens a stream for I/O to the file
149@var{filename}, and returns a pointer to the stream.
150
151The @var{opentype} argument is a string that controls how the file is
152opened and specifies attributes of the resulting stream. It must begin
153with one of the following sequences of characters:
154
155@table @samp
156@item r
157Open an existing file for reading only.
158
159@item w
160Open the file for writing only. If the file already exists, it is
161truncated to zero length. Otherwise a new file is created.
162
163@item a
164Open a file for append access; that is, writing at the end of file only.
165If the file already exists, its initial contents are unchanged and
166output to the stream is appended to the end of the file.
167Otherwise, a new, empty file is created.
168
169@item r+
170Open an existing file for both reading and writing. The initial contents
171of the file are unchanged and the initial file position is at the
172beginning of the file.
173
174@item w+
175Open a file for both reading and writing. If the file already exists, it
176is truncated to zero length. Otherwise, a new file is created.
177
178@item a+
179Open or create file for both reading and appending. If the file exists,
180its initial contents are unchanged. Otherwise, a new file is created.
181The initial file position for reading is at the beginning of the file,
182but output is always appended to the end of the file.
183@end table
184
185As you can see, @samp{+} requests a stream that can do both input and
162ba701
PIM
186output. When using such a stream, you must call @code{fflush}
187(@pxref{Stream Buffering}) or a file positioning function such as
188@code{fseek} (@pxref{File Positioning}) when switching from reading
189to writing or vice versa. Otherwise, internal buffers might not be
190emptied properly.
28f540f4
RM
191
192Additional characters may appear after these to specify flags for the
193call. Always put the mode (@samp{r}, @samp{w+}, etc.) first; that is
194the only part you are guaranteed will be understood by all systems.
195
823fbbb4
AJ
196@Theglibc{} defines additional characters for use in @var{opentype}:
197
198@table @samp
199@item c
200The file is opened with cancellation in the I/O functions disabled.
201
202@item e
203The underlying file descriptor will be closed if you use any of the
204@code{exec@dots{}} functions (@pxref{Executing a File}). (This is
205equivalent to having set @code{FD_CLOEXEC} on that descriptor.
206@xref{Descriptor Flags}.)
207
208@item m
209The file is opened and accessed using @code{mmap}. This is only
210supported with files opened for reading.
211
212@item x
213Insist on creating a new file---if a file @var{filename} already
214exists, @code{fopen} fails rather than opening it. If you use
215@samp{x} you are guaranteed that you will not clobber an existing
216file. This is equivalent to the @code{O_EXCL} option to the
217@code{open} function (@pxref{Opening and Closing Files}).
218
219The @samp{x} modifier is part of @w{ISO C11}.
220@end table
28f540f4
RM
221
222The character @samp{b} in @var{opentype} has a standard meaning; it
223requests a binary stream rather than a text stream. But this makes no
a7a93d50 224difference in POSIX systems (including @gnusystems{}). If both
28f540f4
RM
225@samp{+} and @samp{b} are specified, they can appear in either order.
226@xref{Binary Streams}.
227
4e2e9999
UD
228@cindex stream orientation
229@cindex orientation, stream
230If the @var{opentype} string contains the sequence
231@code{,ccs=@var{STRING}} then @var{STRING} is taken as the name of a
232coded character set and @code{fopen} will mark the stream as
5b23062f
JM
233wide-oriented with appropriate conversion functions in place to convert
234from and to the character set @var{STRING}. Any other stream
4e2e9999
UD
235is opened initially unoriented and the orientation is decided with the
236first file operation. If the first operation is a wide character
237operation, the stream is not only marked as wide-oriented, also the
238conversion functions to convert to the coded character set used for the
239current locale are loaded. This will not change anymore from this point
240on even if the locale selected for the @code{LC_CTYPE} category is
241changed.
242
28f540f4
RM
243Any other characters in @var{opentype} are simply ignored. They may be
244meaningful in other systems.
245
246If the open fails, @code{fopen} returns a null pointer.
a3a4a74e 247
c703cd7a 248When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 24932 bit machine this function is in fact @code{fopen64} since the LFS
a3a4a74e 250interface replaces transparently the old interface.
28f540f4
RM
251@end deftypefun
252
253You can have multiple streams (or file descriptors) pointing to the same
254file open at the same time. If you do only input, this works
255straightforwardly, but you must be careful if any output streams are
256included. @xref{Stream/Descriptor Precautions}. This is equally true
257whether the streams are in one program (not usual) or in several
258programs (which can easily happen). It may be advantageous to use the
259file locking facilities to avoid simultaneous access. @xref{File
260Locks}.
261
a3a4a74e 262@deftypefun {FILE *} fopen64 (const char *@var{filename}, const char *@var{opentype})
d08a7e4c 263@standards{Unix98, stdio.h}
171e9210 264@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @acsfd{} @aculock{}}}
a3a4a74e
UD
265This function is similar to @code{fopen} but the stream it returns a
266pointer for is opened using @code{open64}. Therefore this stream can be
9ceeb279 267used even on files larger than @twoexp{31} bytes on 32 bit machines.
a3a4a74e
UD
268
269Please note that the return type is still @code{FILE *}. There is no
270special @code{FILE} type for the LFS interface.
271
272If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
273bits machine this function is available under the name @code{fopen}
274and so transparently replaces the old interface.
275@end deftypefun
276
28f540f4 277@deftypevr Macro int FOPEN_MAX
d08a7e4c 278@standards{ISO, stdio.h}
28f540f4
RM
279The value of this macro is an integer constant expression that
280represents the minimum number of streams that the implementation
281guarantees can be open simultaneously. You might be able to open more
282than this many streams, but that is not guaranteed. The value of this
283constant is at least eight, which includes the three standard streams
284@code{stdin}, @code{stdout}, and @code{stderr}. In POSIX.1 systems this
285value is determined by the @code{OPEN_MAX} parameter; @pxref{General
286Limits}. In BSD and GNU, it is controlled by the @code{RLIMIT_NOFILE}
287resource limit; @pxref{Limits on Resources}.
288@end deftypevr
289
28f540f4 290@deftypefun {FILE *} freopen (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
d08a7e4c 291@standards{ISO, stdio.h}
171e9210
AO
292@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
293@c Like most I/O operations, this one is guarded by a recursive lock,
294@c released even upon cancellation, but cancellation may leak file
295@c descriptors and leave the stream in an inconsistent state (e.g.,
296@c still bound to the closed descriptor). Also, if the stream is
297@c part-way through a significant update (say running freopen) when a
298@c signal handler calls freopen again on the same stream, the result is
299@c likely to be an inconsistent stream, and the possibility of closing
300@c twice file descriptor number that the stream used to use, the second
301@c time when it might have already been reused by another thread.
28f540f4
RM
302This function is like a combination of @code{fclose} and @code{fopen}.
303It first closes the stream referred to by @var{stream}, ignoring any
304errors that are detected in the process. (Because errors are ignored,
305you should not use @code{freopen} on an output stream if you have
306actually done any output using the stream.) Then the file named by
307@var{filename} is opened with mode @var{opentype} as for @code{fopen},
308and associated with the same stream object @var{stream}.
309
310If the operation fails, a null pointer is returned; otherwise,
f1a67a2c
AZ
311@code{freopen} returns @var{stream}. On Linux, @code{freopen} may also
312fail and set @code{errno} to @code{EBUSY} when the kernel structure for
313the old file descriptor was not initialized completely before @code{freopen}
314was called. This can only happen in multi-threaded programs, when two
315threads race to allocate the same file descriptor number. To avoid the
316possibility of this race, do not use @code{close} to close the underlying
317file descriptor for a @code{FILE}; either use @code{freopen} while the
318file is still open, or use @code{open} and then @code{dup2} to install
319the new file descriptor.
28f540f4
RM
320
321@code{freopen} has traditionally been used to connect a standard stream
322such as @code{stdin} with a file of your own choice. This is useful in
323programs in which use of a standard stream for certain purposes is
1f77f049 324hard-coded. In @theglibc{}, you can simply close the standard
28f540f4
RM
325streams and open new ones with @code{fopen}. But other systems lack
326this ability, so using @code{freopen} is more portable.
a3a4a74e 327
c703cd7a 328When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 32932 bit machine this function is in fact @code{freopen64} since the LFS
a3a4a74e
UD
330interface replaces transparently the old interface.
331@end deftypefun
332
a3a4a74e 333@deftypefun {FILE *} freopen64 (const char *@var{filename}, const char *@var{opentype}, FILE *@var{stream})
d08a7e4c 334@standards{Unix98, stdio.h}
171e9210 335@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @acsfd{}}}
a3a4a74e 336This function is similar to @code{freopen}. The only difference is that
0be8752b 337on 32 bit machine the stream returned is able to read beyond the
9ceeb279 338@twoexp{31} bytes limits imposed by the normal interface. It should be
a3a4a74e
UD
339noted that the stream pointed to by @var{stream} need not be opened
340using @code{fopen64} or @code{freopen64} since its mode is not important
341for this function.
342
343If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
344bits machine this function is available under the name @code{freopen}
345and so transparently replaces the old interface.
28f540f4
RM
346@end deftypefun
347
f8b23b32
UD
348In some situations it is useful to know whether a given stream is
349available for reading or writing. This information is normally not
350available and would have to be remembered separately. Solaris
351introduced a few functions to get this information from the stream
1f77f049 352descriptor and these functions are also available in @theglibc{}.
f8b23b32 353
f8b23b32 354@deftypefun int __freadable (FILE *@var{stream})
d08a7e4c 355@standards{GNU, stdio_ext.h}
171e9210 356@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
f8b23b32
UD
357The @code{__freadable} function determines whether the stream
358@var{stream} was opened to allow reading. In this case the return value
359is nonzero. For write-only streams the function returns zero.
360
361This function is declared in @file{stdio_ext.h}.
362@end deftypefun
363
f8b23b32 364@deftypefun int __fwritable (FILE *@var{stream})
d08a7e4c 365@standards{GNU, stdio_ext.h}
171e9210 366@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
f8b23b32
UD
367The @code{__fwritable} function determines whether the stream
368@var{stream} was opened to allow writing. In this case the return value
369is nonzero. For read-only streams the function returns zero.
370
371This function is declared in @file{stdio_ext.h}.
372@end deftypefun
373
c703cd7a 374For slightly different kinds of problems there are two more functions.
f8b23b32
UD
375They provide even finer-grained information.
376
f8b23b32 377@deftypefun int __freading (FILE *@var{stream})
d08a7e4c 378@standards{GNU, stdio_ext.h}
171e9210 379@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
f8b23b32
UD
380The @code{__freading} function determines whether the stream
381@var{stream} was last read from or whether it is opened read-only. In
382this case the return value is nonzero, otherwise it is zero.
383Determining whether a stream opened for reading and writing was last
384used for writing allows to draw conclusions about the content about the
385buffer, among other things.
386
387This function is declared in @file{stdio_ext.h}.
388@end deftypefun
389
f8b23b32 390@deftypefun int __fwriting (FILE *@var{stream})
d08a7e4c 391@standards{GNU, stdio_ext.h}
171e9210 392@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
f8b23b32
UD
393The @code{__fwriting} function determines whether the stream
394@var{stream} was last written to or whether it is opened write-only. In
395this case the return value is nonzero, otherwise it is zero.
396
397This function is declared in @file{stdio_ext.h}.
398@end deftypefun
399
28f540f4
RM
400
401@node Closing Streams
402@section Closing Streams
403
404@cindex closing a stream
405When a stream is closed with @code{fclose}, the connection between the
0bc93a2f 406stream and the file is canceled. After you have closed a stream, you
28f540f4
RM
407cannot perform any additional operations on it.
408
28f540f4 409@deftypefun int fclose (FILE *@var{stream})
d08a7e4c 410@standards{ISO, stdio.h}
171e9210
AO
411@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{} @acsfd{}}}
412@c After fclose, it is undefined behavior to use the stream it points
413@c to. Therefore, one must only call fclose when the stream is
414@c otherwise unused. Concurrent uses started before will complete
415@c successfully because of the lock, which makes it MT-Safe. Calling it
416@c from a signal handler is perfectly safe if the stream is known to be
417@c no longer used, which is a precondition for fclose to be safe in the
418@c first place; since this is no further requirement, fclose is safe for
419@c use in async signals too. After calling fclose, you can no longer
420@c use the stream, not even to fclose it again, so its memory and file
421@c descriptor may leak if fclose is canceled before @c releasing them.
422@c That the stream must be unused and it becomes unused after the call
423@c is what would enable fclose to be AS- and AC-Safe while freopen
424@c isn't. However, because of the possibility of leaving __gconv_lock
425@c taken upon cancellation, AC-Safety is lost.
28f540f4
RM
426This function causes @var{stream} to be closed and the connection to
427the corresponding file to be broken. Any buffered output is written
428and any buffered input is discarded. The @code{fclose} function returns
429a value of @code{0} if the file was closed successfully, and @code{EOF}
19c3f208 430if an error was detected.
28f540f4
RM
431
432It is important to check for errors when you call @code{fclose} to close
433an output stream, because real, everyday errors can be detected at this
434time. For example, when @code{fclose} writes the remaining buffered
435output, it might get an error because the disk is full. Even if you
436know the buffer is empty, errors can still occur when closing a file if
437you are using NFS.
438
439The function @code{fclose} is declared in @file{stdio.h}.
440@end deftypefun
441
1f77f049 442To close all streams currently available @theglibc{} provides
6bc31da0
UD
443another function.
444
6bc31da0 445@deftypefun int fcloseall (void)
d08a7e4c 446@standards{GNU, stdio.h}
171e9210
AO
447@safety{@prelim{}@mtunsafe{@mtasurace{:streams}}@asunsafe{}@acsafe{}}
448@c Like fclose, using any previously-opened streams after fcloseall is
449@c undefined. However, the implementation of fcloseall isn't equivalent
450@c to calling fclose for all streams: it just flushes and unbuffers all
451@c streams, without any locking. It's the flushing without locking that
452@c makes it unsafe.
6bc31da0 453This function causes all open streams of the process to be closed and
c703cd7a 454the connections to corresponding files to be broken. All buffered data
f2ea0f5b 455is written and any buffered input is discarded. The @code{fcloseall}
6bc31da0
UD
456function returns a value of @code{0} if all the files were closed
457successfully, and @code{EOF} if an error was detected.
458
0be8752b 459This function should be used only in special situations, e.g., when an
6bc31da0 460error occurred and the program must be aborted. Normally each single
0be8752b
UD
461stream should be closed separately so that problems with individual
462streams can be identified. It is also problematic since the standard
463streams (@pxref{Standard Streams}) will also be closed.
6bc31da0
UD
464
465The function @code{fcloseall} is declared in @file{stdio.h}.
466@end deftypefun
467
28f540f4
RM
468If the @code{main} function to your program returns, or if you call the
469@code{exit} function (@pxref{Normal Termination}), all open streams are
470automatically closed properly. If your program terminates in any other
471manner, such as by calling the @code{abort} function (@pxref{Aborting a
472Program}) or from a fatal signal (@pxref{Signal Handling}), open streams
473might not be closed properly. Buffered output might not be flushed and
474files may be incomplete. For more information on buffering of streams,
475see @ref{Stream Buffering}.
476
7b4161bb
UD
477@node Streams and Threads
478@section Streams and Threads
479
480@cindex threads
481@cindex multi-threaded application
482Streams can be used in multi-threaded applications in the same way they
483are used in single-threaded applications. But the programmer must be
11bf311e 484aware of the possible complications. It is important to know about
7b4161bb 485these also if the program one writes never use threads since the design
c703cd7a 486and implementation of many stream functions are heavily influenced by the
f6af7428 487requirements added by multi-threaded programming.
7b4161bb
UD
488
489The POSIX standard requires that by default the stream operations are
0bc93a2f 490atomic. I.e., issuing two stream operations for the same stream in two
7b4161bb
UD
491threads at the same time will cause the operations to be executed as if
492they were issued sequentially. The buffer operations performed while
493reading or writing are protected from other uses of the same stream. To
494do this each stream has an internal lock object which has to be
495(implicitly) acquired before any work can be done.
496
497But there are situations where this is not enough and there are also
498situations where this is not wanted. The implicit locking is not enough
499if the program requires more than one stream function call to happen
500atomically. One example would be if an output line a program wants to
501generate is created by several function calls. The functions by
502themselves would ensure only atomicity of their own operation, but not
503atomicity over all the function calls. For this it is necessary to
504perform the stream locking in the application code.
505
7b4161bb 506@deftypefun void flockfile (FILE *@var{stream})
d08a7e4c 507@standards{POSIX, stdio.h}
171e9210
AO
508@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
509@c There's no way to tell whether the lock was acquired before or after
510@c cancellation so as to unlock only when appropriate.
7b4161bb 511The @code{flockfile} function acquires the internal locking object
f6af7428 512associated with the stream @var{stream}. This ensures that no other
7b4161bb 513thread can explicitly through @code{flockfile}/@code{ftrylockfile} or
c703cd7a 514implicitly through the call of a stream function lock the stream. The
7b4161bb
UD
515thread will block until the lock is acquired. An explicit call to
516@code{funlockfile} has to be used to release the lock.
517@end deftypefun
518
7b4161bb 519@deftypefun int ftrylockfile (FILE *@var{stream})
d08a7e4c 520@standards{POSIX, stdio.h}
171e9210 521@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
f6af7428 522The @code{ftrylockfile} function tries to acquire the internal locking
7b4161bb
UD
523object associated with the stream @var{stream} just like
524@code{flockfile}. But unlike @code{flockfile} this function does not
525block if the lock is not available. @code{ftrylockfile} returns zero if
526the lock was successfully acquired. Otherwise the stream is locked by
527another thread.
528@end deftypefun
529
7b4161bb 530@deftypefun void funlockfile (FILE *@var{stream})
d08a7e4c 531@standards{POSIX, stdio.h}
171e9210 532@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
7b4161bb 533The @code{funlockfile} function releases the internal locking object of
cf822e3c 534the stream @var{stream}. The stream must have been locked before by a
7b4161bb
UD
535call to @code{flockfile} or a successful call of @code{ftrylockfile}.
536The implicit locking performed by the stream operations do not count.
537The @code{funlockfile} function does not return an error status and the
538behavior of a call for a stream which is not locked by the current
539thread is undefined.
540@end deftypefun
541
542The following example shows how the functions above can be used to
543generate an output line atomically even in multi-threaded applications
544(yes, the same job could be done with one @code{fprintf} call but it is
545sometimes not possible):
546
547@smallexample
548FILE *fp;
549@{
95fdc6a0 550 @dots{}
7b4161bb
UD
551 flockfile (fp);
552 fputs ("This is test number ", fp);
553 fprintf (fp, "%d\n", test);
554 funlockfile (fp)
555@}
556@end smallexample
557
558Without the explicit locking it would be possible for another thread to
c703cd7a 559use the stream @var{fp} after the @code{fputs} call returns and before
7b4161bb
UD
560@code{fprintf} was called with the result that the number does not
561follow the word @samp{number}.
562
563From this description it might already be clear that the locking objects
564in streams are no simple mutexes. Since locking the same stream twice
565in the same thread is allowed the locking objects must be equivalent to
566recursive mutexes. These mutexes keep track of the owner and the number
567of times the lock is acquired. The same number of @code{funlockfile}
568calls by the same threads is necessary to unlock the stream completely.
569For instance:
570
571@smallexample
572void
573foo (FILE *fp)
574@{
575 ftrylockfile (fp);
576 fputs ("in foo\n", fp);
577 /* @r{This is very wrong!!!} */
578 funlockfile (fp);
579@}
580@end smallexample
581
582It is important here that the @code{funlockfile} function is only called
583if the @code{ftrylockfile} function succeeded in locking the stream. It
584is therefore always wrong to ignore the result of @code{ftrylockfile}.
585And it makes no sense since otherwise one would use @code{flockfile}.
586The result of code like that above is that either @code{funlockfile}
f6af7428 587tries to free a stream that hasn't been locked by the current thread or it
7b4161bb
UD
588frees the stream prematurely. The code should look like this:
589
590@smallexample
591void
592foo (FILE *fp)
593@{
594 if (ftrylockfile (fp) == 0)
595 @{
596 fputs ("in foo\n", fp);
597 funlockfile (fp);
598 @}
599@}
600@end smallexample
601
c703cd7a 602Now that we covered why it is necessary to have locking it is
f6af7428 603necessary to talk about situations when locking is unwanted and what can
7b4161bb
UD
604be done. The locking operations (explicit or implicit) don't come for
605free. Even if a lock is not taken the cost is not zero. The operations
3ca9e670 606which have to be performed require memory operations that are safe in
7b4161bb
UD
607multi-processor environments. With the many local caches involved in
608such systems this is quite costly. So it is best to avoid the locking
3ca9e670
UD
609completely if it is not needed -- because the code in question is never
610used in a context where two or more threads may use a stream at a time.
7b4161bb
UD
611This can be determined most of the time for application code; for
612library code which can be used in many contexts one should default to be
613conservative and use locking.
614
615There are two basic mechanisms to avoid locking. The first is to use
616the @code{_unlocked} variants of the stream operations. The POSIX
1f77f049 617standard defines quite a few of those and @theglibc{} adds a few
7b4161bb 618more. These variants of the functions behave just like the functions
3ca9e670 619with the name without the suffix except that they do not lock the
7b4161bb 620stream. Using these functions is very desirable since they are
f6af7428 621potentially much faster. This is not only because the locking
7b4161bb 622operation itself is avoided. More importantly, functions like
0bc93a2f 623@code{putc} and @code{getc} are very simple and traditionally (before the
7b4161bb 624introduction of threads) were implemented as macros which are very fast
3ca9e670
UD
625if the buffer is not empty. With the addition of locking requirements
626these functions are no longer implemented as macros since they would
bbf70ae9 627expand to too much code.
3ca9e670 628But these macros are still available with the same functionality under the new
7b4161bb
UD
629names @code{putc_unlocked} and @code{getc_unlocked}. This possibly huge
630difference of speed also suggests the use of the @code{_unlocked}
631functions even if locking is required. The difference is that the
632locking then has to be performed in the program:
633
634@smallexample
635void
636foo (FILE *fp, char *buf)
637@{
638 flockfile (fp);
639 while (*buf != '/')
640 putc_unlocked (*buf++, fp);
641 funlockfile (fp);
642@}
643@end smallexample
644
645If in this example the @code{putc} function would be used and the
646explicit locking would be missing the @code{putc} function would have to
647acquire the lock in every call, potentially many times depending on when
648the loop terminates. Writing it the way illustrated above allows the
649@code{putc_unlocked} macro to be used which means no locking and direct
650manipulation of the buffer of the stream.
651
652A second way to avoid locking is by using a non-standard function which
1f77f049 653was introduced in Solaris and is available in @theglibc{} as well.
7b4161bb 654
7b4161bb 655@deftypefun int __fsetlocking (FILE *@var{stream}, int @var{type})
d08a7e4c 656@standards{GNU, stdio_ext.h}
171e9210
AO
657@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asulock{}}@acsafe{}}
658@c Changing the implicit-locking status of a stream while it's in use by
659@c another thread may cause a lock to be implicitly acquired and not
660@c released, or vice-versa. This function should probably hold the lock
661@c while changing this setting, to make sure we don't change it while
662@c there are any concurrent uses. Meanwhile, callers should acquire the
663@c lock themselves to be safe, and even concurrent uses with external
664@c locking will be fine, as long as functions that require external
665@c locking are not called without holding locks.
7b4161bb
UD
666
667The @code{__fsetlocking} function can be used to select whether the
668stream operations will implicitly acquire the locking object of the
669stream @var{stream}. By default this is done but it can be disabled and
670reinstated using this function. There are three values defined for the
671@var{type} parameter.
672
673@vtable @code
674@item FSETLOCKING_INTERNAL
675The stream @code{stream} will from now on use the default internal
676locking. Every stream operation with exception of the @code{_unlocked}
677variants will implicitly lock the stream.
678
679@item FSETLOCKING_BYCALLER
c703cd7a 680After the @code{__fsetlocking} function returns, the user is responsible
7b4161bb
UD
681for locking the stream. None of the stream operations will implicitly
682do this anymore until the state is set back to
683@code{FSETLOCKING_INTERNAL}.
684
685@item FSETLOCKING_QUERY
686@code{__fsetlocking} only queries the current locking state of the
687stream. The return value will be @code{FSETLOCKING_INTERNAL} or
688@code{FSETLOCKING_BYCALLER} depending on the state.
689@end vtable
690
691The return value of @code{__fsetlocking} is either
692@code{FSETLOCKING_INTERNAL} or @code{FSETLOCKING_BYCALLER} depending on
693the state of the stream before the call.
694
695This function and the values for the @var{type} parameter are declared
696in @file{stdio_ext.h}.
697@end deftypefun
698
699This function is especially useful when program code has to be used
700which is written without knowledge about the @code{_unlocked} functions
3ca9e670 701(or if the programmer was too lazy to use them).
7b4161bb 702
b5e73f56
UD
703@node Streams and I18N
704@section Streams in Internationalized Applications
705
706@w{ISO C90} introduced the new type @code{wchar_t} to allow handling
707larger character sets. What was missing was a possibility to output
708strings of @code{wchar_t} directly. One had to convert them into
709multibyte strings using @code{mbstowcs} (there was no @code{mbsrtowcs}
710yet) and then use the normal stream functions. While this is doable it
711is very cumbersome since performing the conversions is not trivial and
712greatly increases program complexity and size.
713
714The Unix standard early on (I think in XPG4.2) introduced two additional
715format specifiers for the @code{printf} and @code{scanf} families of
716functions. Printing and reading of single wide characters was made
717possible using the @code{%C} specifier and wide character strings can be
718handled with @code{%S}. These modifiers behave just like @code{%c} and
719@code{%s} only that they expect the corresponding argument to have the
720wide character type and that the wide character and string are
721transformed into/from multibyte strings before being used.
722
723This was a beginning but it is still not good enough. Not always is it
724desirable to use @code{printf} and @code{scanf}. The other, smaller and
725faster functions cannot handle wide characters. Second, it is not
726possible to have a format string for @code{printf} and @code{scanf}
727consisting of wide characters. The result is that format strings would
728have to be generated if they have to contain non-basic characters.
729
730@cindex C++ streams
731@cindex streams, C++
732In the @w{Amendment 1} to @w{ISO C90} a whole new set of functions was
733added to solve the problem. Most of the stream functions got a
734counterpart which take a wide character or wide character string instead
735of a character or string respectively. The new functions operate on the
736same streams (like @code{stdout}). This is different from the model of
737the C++ runtime library where separate streams for wide and normal I/O
738are used.
739
740@cindex orientation, stream
741@cindex stream orientation
742Being able to use the same stream for wide and normal operations comes
743with a restriction: a stream can be used either for wide operations or
744for normal operations. Once it is decided there is no way back. Only a
745call to @code{freopen} or @code{freopen64} can reset the
746@dfn{orientation}. The orientation can be decided in three ways:
747
748@itemize @bullet
749@item
c703cd7a 750If any of the normal character functions are used (this includes the
22298d18 751@code{fread} and @code{fwrite} functions) the stream is marked as not
b5e73f56
UD
752wide oriented.
753
754@item
c703cd7a 755If any of the wide character functions are used the stream is marked as
22298d18 756wide oriented.
b5e73f56
UD
757
758@item
759The @code{fwide} function can be used to set the orientation either way.
760@end itemize
761
762It is important to never mix the use of wide and not wide operations on
763a stream. There are no diagnostics issued. The application behavior
764will simply be strange or the application will simply crash. The
c703cd7a 765@code{fwide} function can help avoid this.
b5e73f56 766
b5e73f56 767@deftypefun int fwide (FILE *@var{stream}, int @var{mode})
d08a7e4c 768@standards{ISO, wchar.h}
171e9210
AO
769@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{}}}
770@c Querying is always safe, but changing the stream when it's in use
771@c upthread may be problematic. Like most lock-acquiring functions,
772@c this one may leak the lock if canceled.
b5e73f56 773
22298d18 774The @code{fwide} function can be used to set and query the state of the
b5e73f56
UD
775orientation of the stream @var{stream}. If the @var{mode} parameter has
776a positive value the streams get wide oriented, for negative values
777narrow oriented. It is not possible to overwrite previous orientations
778with @code{fwide}. I.e., if the stream @var{stream} was already
779oriented before the call nothing is done.
780
781If @var{mode} is zero the current orientation state is queried and
782nothing is changed.
783
784The @code{fwide} function returns a negative value, zero, or a positive
785value if the stream is narrow, not at all, or wide oriented
786respectively.
787
788This function was introduced in @w{Amendment 1} to @w{ISO C90} and is
789declared in @file{wchar.h}.
790@end deftypefun
791
792It is generally a good idea to orient a stream as early as possible.
793This can prevent surprise especially for the standard streams
794@code{stdin}, @code{stdout}, and @code{stderr}. If some library
795function in some situations uses one of these streams and this use
796orients the stream in a different way the rest of the application
797expects it one might end up with hard to reproduce errors. Remember
798that no errors are signal if the streams are used incorrectly. Leaving
799a stream unoriented after creation is normally only necessary for
800library functions which create streams which can be used in different
801contexts.
802
803When writing code which uses streams and which can be used in different
804contexts it is important to query the orientation of the stream before
805using it (unless the rules of the library interface demand a specific
806orientation). The following little, silly function illustrates this.
807
808@smallexample
809void
810print_f (FILE *fp)
811@{
812 if (fwide (fp, 0) > 0)
813 /* @r{Positive return value means wide orientation.} */
814 fputwc (L'f', fp);
815 else
816 fputc ('f', fp);
817@}
818@end smallexample
819
820Note that in this case the function @code{print_f} decides about the
821orientation of the stream if it was unoriented before (will not happen
c703cd7a 822if the advice above is followed).
b5e73f56
UD
823
824The encoding used for the @code{wchar_t} values is unspecified and the
825user must not make any assumptions about it. For I/O of @code{wchar_t}
826values this means that it is impossible to write these values directly
827to the stream. This is not what follows from the @w{ISO C} locale model
828either. What happens instead is that the bytes read from or written to
829the underlying media are first converted into the internal encoding
830chosen by the implementation for @code{wchar_t}. The external encoding
831is determined by the @code{LC_CTYPE} category of the current locale or
832by the @samp{ccs} part of the mode specification given to @code{fopen},
833@code{fopen64}, @code{freopen}, or @code{freopen64}. How and when the
c703cd7a 834conversion happens is unspecified and it happens invisibly to the user.
b5e73f56
UD
835
836Since a stream is created in the unoriented state it has at that point
837no conversion associated with it. The conversion which will be used is
838determined by the @code{LC_CTYPE} category selected at the time the
839stream is oriented. If the locales are changed at the runtime this
840might produce surprising results unless one pays attention. This is
841just another good reason to orient the stream explicitly as soon as
842possible, perhaps with a call to @code{fwide}.
843
28f540f4
RM
844@node Simple Output
845@section Simple Output by Characters or Lines
846
847@cindex writing to a stream, by characters
848This section describes functions for performing character- and
849line-oriented output.
850
c703cd7a 851These narrow stream functions are declared in the header file
b5e73f56 852@file{stdio.h} and the wide stream functions in @file{wchar.h}.
28f540f4 853@pindex stdio.h
b5e73f56 854@pindex wchar.h
28f540f4 855
28f540f4 856@deftypefun int fputc (int @var{c}, FILE *@var{stream})
d08a7e4c 857@standards{ISO, stdio.h}
171e9210
AO
858@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
859@c If the stream is in use when interrupted by a signal, the recursive
860@c lock won't help ensure the stream is consistent; indeed, if fputc
861@c gets a signal precisely before the post-incremented _IO_write_ptr
862@c value is stored, we may overwrite the interrupted write. Conversely,
863@c depending on compiler optimizations, the incremented _IO_write_ptr
864@c may be stored before the character is stored in the buffer,
865@c corrupting the stream if async cancel hits between the two stores.
866@c There may be other reasons for AS- and AC-unsafety in the overflow
867@c cases.
28f540f4 868The @code{fputc} function converts the character @var{c} to type
19c3f208 869@code{unsigned char}, and writes it to the stream @var{stream}.
28f540f4
RM
870@code{EOF} is returned if a write error occurs; otherwise the
871character @var{c} is returned.
872@end deftypefun
873
b5e73f56 874@deftypefun wint_t fputwc (wchar_t @var{wc}, FILE *@var{stream})
d08a7e4c 875@standards{ISO, wchar.h}
171e9210 876@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
b5e73f56
UD
877The @code{fputwc} function writes the wide character @var{wc} to the
878stream @var{stream}. @code{WEOF} is returned if a write error occurs;
879otherwise the character @var{wc} is returned.
880@end deftypefun
881
7b4161bb 882@deftypefun int fputc_unlocked (int @var{c}, FILE *@var{stream})
d08a7e4c 883@standards{POSIX, stdio.h}
171e9210
AO
884@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
885@c The unlocked functions can't possibly satisfy the MT-Safety
886@c requirements on their own, because they require external locking for
887@c safety.
7b4161bb 888The @code{fputc_unlocked} function is equivalent to the @code{fputc}
1dc843f7 889function except that it does not implicitly lock the stream.
7b4161bb
UD
890@end deftypefun
891
8ded91fb 892@deftypefun wint_t fputwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
d08a7e4c 893@standards{POSIX, wchar.h}
171e9210 894@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 895The @code{fputwc_unlocked} function is equivalent to the @code{fputwc}
1dc843f7 896function except that it does not implicitly lock the stream.
b5e73f56
UD
897
898This function is a GNU extension.
899@end deftypefun
900
28f540f4 901@deftypefun int putc (int @var{c}, FILE *@var{stream})
d08a7e4c 902@standards{ISO, stdio.h}
171e9210 903@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
28f540f4
RM
904This is just like @code{fputc}, except that most systems implement it as
905a macro, making it faster. One consequence is that it may evaluate the
906@var{stream} argument more than once, which is an exception to the
907general rule for macros. @code{putc} is usually the best function to
908use for writing a single character.
909@end deftypefun
910
b5e73f56 911@deftypefun wint_t putwc (wchar_t @var{wc}, FILE *@var{stream})
d08a7e4c 912@standards{ISO, wchar.h}
171e9210 913@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
b5e73f56
UD
914This is just like @code{fputwc}, except that it can be implement as
915a macro, making it faster. One consequence is that it may evaluate the
916@var{stream} argument more than once, which is an exception to the
917general rule for macros. @code{putwc} is usually the best function to
918use for writing a single wide character.
919@end deftypefun
920
7b4161bb 921@deftypefun int putc_unlocked (int @var{c}, FILE *@var{stream})
d08a7e4c 922@standards{POSIX, stdio.h}
171e9210 923@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 924The @code{putc_unlocked} function is equivalent to the @code{putc}
1dc843f7 925function except that it does not implicitly lock the stream.
7b4161bb
UD
926@end deftypefun
927
b5e73f56 928@deftypefun wint_t putwc_unlocked (wchar_t @var{wc}, FILE *@var{stream})
d08a7e4c 929@standards{GNU, wchar.h}
171e9210 930@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 931The @code{putwc_unlocked} function is equivalent to the @code{putwc}
1dc843f7 932function except that it does not implicitly lock the stream.
b5e73f56
UD
933
934This function is a GNU extension.
935@end deftypefun
936
28f540f4 937@deftypefun int putchar (int @var{c})
d08a7e4c 938@standards{ISO, stdio.h}
171e9210 939@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
28f540f4
RM
940The @code{putchar} function is equivalent to @code{putc} with
941@code{stdout} as the value of the @var{stream} argument.
942@end deftypefun
943
c44a663d 944@deftypefun wint_t putwchar (wchar_t @var{wc})
d08a7e4c 945@standards{ISO, wchar.h}
171e9210 946@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
b5e73f56
UD
947The @code{putwchar} function is equivalent to @code{putwc} with
948@code{stdout} as the value of the @var{stream} argument.
949@end deftypefun
950
7b4161bb 951@deftypefun int putchar_unlocked (int @var{c})
d08a7e4c 952@standards{POSIX, stdio.h}
171e9210 953@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 954The @code{putchar_unlocked} function is equivalent to the @code{putchar}
1dc843f7 955function except that it does not implicitly lock the stream.
7b4161bb
UD
956@end deftypefun
957
b5e73f56 958@deftypefun wint_t putwchar_unlocked (wchar_t @var{wc})
d08a7e4c 959@standards{GNU, wchar.h}
171e9210 960@safety{@prelim{}@mtunsafe{@mtasurace{:stdout}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 961The @code{putwchar_unlocked} function is equivalent to the @code{putwchar}
1dc843f7 962function except that it does not implicitly lock the stream.
b5e73f56
UD
963
964This function is a GNU extension.
965@end deftypefun
966
28f540f4 967@deftypefun int fputs (const char *@var{s}, FILE *@var{stream})
d08a7e4c 968@standards{ISO, stdio.h}
171e9210 969@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
28f540f4
RM
970The function @code{fputs} writes the string @var{s} to the stream
971@var{stream}. The terminating null character is not written.
972This function does @emph{not} add a newline character, either.
973It outputs only the characters in the string.
974
975This function returns @code{EOF} if a write error occurs, and otherwise
976a non-negative value.
977
978For example:
979
980@smallexample
981fputs ("Are ", stdout);
982fputs ("you ", stdout);
983fputs ("hungry?\n", stdout);
984@end smallexample
985
986@noindent
987outputs the text @samp{Are you hungry?} followed by a newline.
988@end deftypefun
989
b5e73f56 990@deftypefun int fputws (const wchar_t *@var{ws}, FILE *@var{stream})
d08a7e4c 991@standards{ISO, wchar.h}
171e9210 992@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{} @aculock{}}}
b5e73f56
UD
993The function @code{fputws} writes the wide character string @var{ws} to
994the stream @var{stream}. The terminating null character is not written.
995This function does @emph{not} add a newline character, either. It
996outputs only the characters in the string.
997
998This function returns @code{WEOF} if a write error occurs, and otherwise
999a non-negative value.
1000@end deftypefun
1001
7b4161bb 1002@deftypefun int fputs_unlocked (const char *@var{s}, FILE *@var{stream})
d08a7e4c 1003@standards{GNU, stdio.h}
171e9210 1004@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1005The @code{fputs_unlocked} function is equivalent to the @code{fputs}
1dc843f7 1006function except that it does not implicitly lock the stream.
7b4161bb
UD
1007
1008This function is a GNU extension.
1009@end deftypefun
1010
b5e73f56 1011@deftypefun int fputws_unlocked (const wchar_t *@var{ws}, FILE *@var{stream})
d08a7e4c 1012@standards{GNU, wchar.h}
171e9210 1013@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 1014The @code{fputws_unlocked} function is equivalent to the @code{fputws}
1dc843f7 1015function except that it does not implicitly lock the stream.
b5e73f56
UD
1016
1017This function is a GNU extension.
1018@end deftypefun
1019
28f540f4 1020@deftypefun int puts (const char *@var{s})
d08a7e4c 1021@standards{ISO, stdio.h}
171e9210 1022@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1023The @code{puts} function writes the string @var{s} to the stream
1024@code{stdout} followed by a newline. The terminating null character of
1025the string is not written. (Note that @code{fputs} does @emph{not}
1026write a newline as this function does.)
1027
1028@code{puts} is the most convenient function for printing simple
1029messages. For example:
1030
1031@smallexample
1032puts ("This is a message.");
1033@end smallexample
0be8752b
UD
1034
1035@noindent
1036outputs the text @samp{This is a message.} followed by a newline.
28f540f4
RM
1037@end deftypefun
1038
28f540f4 1039@deftypefun int putw (int @var{w}, FILE *@var{stream})
d08a7e4c 1040@standards{SVID, stdio.h}
171e9210 1041@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1042This function writes the word @var{w} (that is, an @code{int}) to
1043@var{stream}. It is provided for compatibility with SVID, but we
1044recommend you use @code{fwrite} instead (@pxref{Block Input/Output}).
1045@end deftypefun
1046
1047@node Character Input
1048@section Character Input
1049
1050@cindex reading from a stream, by characters
b5e73f56 1051This section describes functions for performing character-oriented
c703cd7a 1052input. These narrow stream functions are declared in the header file
b5e73f56
UD
1053@file{stdio.h} and the wide character functions are declared in
1054@file{wchar.h}.
28f540f4 1055@pindex stdio.h
b5e73f56
UD
1056@pindex wchar.h
1057
1058These functions return an @code{int} or @code{wint_t} value (for narrow
1059and wide stream functions respectively) that is either a character of
1060input, or the special value @code{EOF}/@code{WEOF} (usually -1). For
1061the narrow stream functions it is important to store the result of these
1062functions in a variable of type @code{int} instead of @code{char}, even
1063when you plan to use it only as a character. Storing @code{EOF} in a
1064@code{char} variable truncates its value to the size of a character, so
1065that it is no longer distinguishable from the valid character
1066@samp{(char) -1}. So always use an @code{int} for the result of
1067@code{getc} and friends, and check for @code{EOF} after the call; once
1068you've verified that the result is not @code{EOF}, you can be sure that
1069it will fit in a @samp{char} variable without loss of information.
28f540f4 1070
28f540f4 1071@deftypefun int fgetc (FILE *@var{stream})
d08a7e4c 1072@standards{ISO, stdio.h}
171e9210
AO
1073@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
1074@c Same caveats as fputc, but instead of losing a write in case of async
1075@c signals, we may read the same character more than once, and the
1076@c stream may be left in odd states due to cancellation in the underflow
1077@c cases.
28f540f4
RM
1078This function reads the next character as an @code{unsigned char} from
1079the stream @var{stream} and returns its value, converted to an
1080@code{int}. If an end-of-file condition or read error occurs,
19c3f208 1081@code{EOF} is returned instead.
28f540f4
RM
1082@end deftypefun
1083
b5e73f56 1084@deftypefun wint_t fgetwc (FILE *@var{stream})
d08a7e4c 1085@standards{ISO, wchar.h}
171e9210 1086@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
b5e73f56
UD
1087This function reads the next wide character from the stream @var{stream}
1088and returns its value. If an end-of-file condition or read error
1089occurs, @code{WEOF} is returned instead.
1090@end deftypefun
1091
7b4161bb 1092@deftypefun int fgetc_unlocked (FILE *@var{stream})
d08a7e4c 1093@standards{POSIX, stdio.h}
171e9210 1094@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1095The @code{fgetc_unlocked} function is equivalent to the @code{fgetc}
1dc843f7 1096function except that it does not implicitly lock the stream.
7b4161bb
UD
1097@end deftypefun
1098
b5e73f56 1099@deftypefun wint_t fgetwc_unlocked (FILE *@var{stream})
d08a7e4c 1100@standards{GNU, wchar.h}
171e9210 1101@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 1102The @code{fgetwc_unlocked} function is equivalent to the @code{fgetwc}
1dc843f7 1103function except that it does not implicitly lock the stream.
b5e73f56
UD
1104
1105This function is a GNU extension.
1106@end deftypefun
1107
28f540f4 1108@deftypefun int getc (FILE *@var{stream})
d08a7e4c 1109@standards{ISO, stdio.h}
171e9210 1110@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1111This is just like @code{fgetc}, except that it is permissible (and
1112typical) for it to be implemented as a macro that evaluates the
1113@var{stream} argument more than once. @code{getc} is often highly
1114optimized, so it is usually the best function to use to read a single
1115character.
1116@end deftypefun
1117
b5e73f56 1118@deftypefun wint_t getwc (FILE *@var{stream})
d08a7e4c 1119@standards{ISO, wchar.h}
171e9210 1120@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
b5e73f56
UD
1121This is just like @code{fgetwc}, except that it is permissible for it to
1122be implemented as a macro that evaluates the @var{stream} argument more
1123than once. @code{getwc} can be highly optimized, so it is usually the
1124best function to use to read a single wide character.
1125@end deftypefun
1126
7b4161bb 1127@deftypefun int getc_unlocked (FILE *@var{stream})
d08a7e4c 1128@standards{POSIX, stdio.h}
171e9210 1129@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1130The @code{getc_unlocked} function is equivalent to the @code{getc}
1dc843f7 1131function except that it does not implicitly lock the stream.
7b4161bb
UD
1132@end deftypefun
1133
b5e73f56 1134@deftypefun wint_t getwc_unlocked (FILE *@var{stream})
d08a7e4c 1135@standards{GNU, wchar.h}
171e9210 1136@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 1137The @code{getwc_unlocked} function is equivalent to the @code{getwc}
1dc843f7 1138function except that it does not implicitly lock the stream.
b5e73f56
UD
1139
1140This function is a GNU extension.
1141@end deftypefun
1142
28f540f4 1143@deftypefun int getchar (void)
d08a7e4c 1144@standards{ISO, stdio.h}
171e9210 1145@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1146The @code{getchar} function is equivalent to @code{getc} with @code{stdin}
1147as the value of the @var{stream} argument.
1148@end deftypefun
1149
b5e73f56 1150@deftypefun wint_t getwchar (void)
d08a7e4c 1151@standards{ISO, wchar.h}
171e9210 1152@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
b5e73f56
UD
1153The @code{getwchar} function is equivalent to @code{getwc} with @code{stdin}
1154as the value of the @var{stream} argument.
1155@end deftypefun
1156
7b4161bb 1157@deftypefun int getchar_unlocked (void)
d08a7e4c 1158@standards{POSIX, stdio.h}
171e9210 1159@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1160The @code{getchar_unlocked} function is equivalent to the @code{getchar}
1dc843f7 1161function except that it does not implicitly lock the stream.
7b4161bb
UD
1162@end deftypefun
1163
b5e73f56 1164@deftypefun wint_t getwchar_unlocked (void)
d08a7e4c 1165@standards{GNU, wchar.h}
171e9210 1166@safety{@prelim{}@mtunsafe{@mtasurace{:stdin}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 1167The @code{getwchar_unlocked} function is equivalent to the @code{getwchar}
1dc843f7 1168function except that it does not implicitly lock the stream.
b5e73f56
UD
1169
1170This function is a GNU extension.
1171@end deftypefun
1172
28f540f4
RM
1173Here is an example of a function that does input using @code{fgetc}. It
1174would work just as well using @code{getc} instead, or using
b5e73f56
UD
1175@code{getchar ()} instead of @w{@code{fgetc (stdin)}}. The code would
1176also work the same for the wide character stream functions.
28f540f4
RM
1177
1178@smallexample
1179int
1180y_or_n_p (const char *question)
1181@{
1182 fputs (question, stdout);
1183 while (1)
1184 @{
1185 int c, answer;
1186 /* @r{Write a space to separate answer from question.} */
1187 fputc (' ', stdout);
1188 /* @r{Read the first character of the line.}
162ba701 1189 @r{This should be the answer character, but might not be.} */
28f540f4
RM
1190 c = tolower (fgetc (stdin));
1191 answer = c;
1192 /* @r{Discard rest of input line.} */
1193 while (c != '\n' && c != EOF)
162ba701 1194 c = fgetc (stdin);
28f540f4
RM
1195 /* @r{Obey the answer if it was valid.} */
1196 if (answer == 'y')
162ba701 1197 return 1;
28f540f4 1198 if (answer == 'n')
162ba701 1199 return 0;
28f540f4
RM
1200 /* @r{Answer was invalid: ask for valid answer.} */
1201 fputs ("Please answer y or n:", stdout);
1202 @}
1203@}
1204@end smallexample
1205
28f540f4 1206@deftypefun int getw (FILE *@var{stream})
d08a7e4c 1207@standards{SVID, stdio.h}
171e9210 1208@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1209This function reads a word (that is, an @code{int}) from @var{stream}.
1210It's provided for compatibility with SVID. We recommend you use
1211@code{fread} instead (@pxref{Block Input/Output}). Unlike @code{getc},
1212any @code{int} value could be a valid result. @code{getw} returns
1213@code{EOF} when it encounters end-of-file or an error, but there is no
1214way to distinguish this from an input word with value -1.
1215@end deftypefun
1216
1217@node Line Input
1218@section Line-Oriented Input
1219
b5e73f56 1220Since many programs interpret input on the basis of lines, it is
28f540f4
RM
1221convenient to have functions to read a line of text from a stream.
1222
1223Standard C has functions to do this, but they aren't very safe: null
1224characters and even (for @code{gets}) long lines can confuse them. So
1f77f049 1225@theglibc{} provides the nonstandard @code{getline} function that
28f540f4
RM
1226makes it easy to read lines reliably.
1227
1228Another GNU extension, @code{getdelim}, generalizes @code{getline}. It
1229reads a delimited record, defined as everything through the next
1230occurrence of a specified delimiter character.
1231
1232All these functions are declared in @file{stdio.h}.
1233
28f540f4 1234@deftypefun ssize_t getline (char **@var{lineptr}, size_t *@var{n}, FILE *@var{stream})
d08a7e4c 1235@standards{GNU, stdio.h}
171e9210
AO
1236@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
1237@c Besides the usual possibility of getting an inconsistent stream in a
1238@c signal handler or leaving it inconsistent in case of cancellation,
1239@c the possibility of leaving a dangling pointer upon cancellation
1240@c between reallocing the buffer at *lineptr and updating the pointer
1241@c brings about another case of @acucorrupt.
28f540f4
RM
1242This function reads an entire line from @var{stream}, storing the text
1243(including the newline and a terminating null character) in a buffer
1244and storing the buffer address in @code{*@var{lineptr}}.
1245
1246Before calling @code{getline}, you should place in @code{*@var{lineptr}}
1247the address of a buffer @code{*@var{n}} bytes long, allocated with
1248@code{malloc}. If this buffer is long enough to hold the line,
1249@code{getline} stores the line in this buffer. Otherwise,
1250@code{getline} makes the buffer bigger using @code{realloc}, storing the
1251new buffer address back in @code{*@var{lineptr}} and the increased size
1252back in @code{*@var{n}}.
1253@xref{Unconstrained Allocation}.
1254
1255If you set @code{*@var{lineptr}} to a null pointer, and @code{*@var{n}}
1256to zero, before the call, then @code{getline} allocates the initial
1c21d115
DS
1257buffer for you by calling @code{malloc}. This buffer remains allocated
1258even if @code{getline} encounters errors and is unable to read any bytes.
28f540f4
RM
1259
1260In either case, when @code{getline} returns, @code{*@var{lineptr}} is
1261a @code{char *} which points to the text of the line.
1262
1263When @code{getline} is successful, it returns the number of characters
1264read (including the newline, but not including the terminating null).
1265This value enables you to distinguish null characters that are part of
1266the line from the null character inserted as a terminator.
1267
1268This function is a GNU extension, but it is the recommended way to read
1269lines from a stream. The alternative standard functions are unreliable.
1270
ec28fc7c
UD
1271If an error occurs or end of file is reached without any bytes read,
1272@code{getline} returns @code{-1}.
28f540f4
RM
1273@end deftypefun
1274
28f540f4 1275@deftypefun ssize_t getdelim (char **@var{lineptr}, size_t *@var{n}, int @var{delimiter}, FILE *@var{stream})
d08a7e4c 1276@standards{GNU, stdio.h}
171e9210
AO
1277@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@aculock{} @acucorrupt{} @acsmem{}}}
1278@c See the getline @acucorrupt note.
28f540f4
RM
1279This function is like @code{getline} except that the character which
1280tells it to stop reading is not necessarily newline. The argument
1281@var{delimiter} specifies the delimiter character; @code{getdelim} keeps
1282reading until it sees that character (or end of file).
1283
1284The text is stored in @var{lineptr}, including the delimiter character
1285and a terminating null. Like @code{getline}, @code{getdelim} makes
1286@var{lineptr} bigger if it isn't big enough.
1287
1288@code{getline} is in fact implemented in terms of @code{getdelim}, just
1289like this:
1290
1291@smallexample
1292ssize_t
1293getline (char **lineptr, size_t *n, FILE *stream)
1294@{
1295 return getdelim (lineptr, n, '\n', stream);
1296@}
1297@end smallexample
1298@end deftypefun
1299
28f540f4 1300@deftypefun {char *} fgets (char *@var{s}, int @var{count}, FILE *@var{stream})
d08a7e4c 1301@standards{ISO, stdio.h}
171e9210 1302@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1303The @code{fgets} function reads characters from the stream @var{stream}
1304up to and including a newline character and stores them in the string
1305@var{s}, adding a null character to mark the end of the string. You
1306must supply @var{count} characters worth of space in @var{s}, but the
1307number of characters read is at most @var{count} @minus{} 1. The extra
1308character space is used to hold the null character at the end of the
1309string.
1310
1311If the system is already at end of file when you call @code{fgets}, then
1312the contents of the array @var{s} are unchanged and a null pointer is
1313returned. A null pointer is also returned if a read error occurs.
1314Otherwise, the return value is the pointer @var{s}.
1315
1316@strong{Warning:} If the input data has a null character, you can't tell.
1317So don't use @code{fgets} unless you know the data cannot contain a null.
1318Don't use it to read files edited by the user because, if the user inserts
1319a null character, you should either handle it properly or print a clear
1320error message. We recommend using @code{getline} instead of @code{fgets}.
1321@end deftypefun
1322
b5e73f56 1323@deftypefun {wchar_t *} fgetws (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
d08a7e4c 1324@standards{ISO, wchar.h}
171e9210 1325@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
b5e73f56
UD
1326The @code{fgetws} function reads wide characters from the stream
1327@var{stream} up to and including a newline character and stores them in
1328the string @var{ws}, adding a null wide character to mark the end of the
1329string. You must supply @var{count} wide characters worth of space in
1330@var{ws}, but the number of characters read is at most @var{count}
1331@minus{} 1. The extra character space is used to hold the null wide
1332character at the end of the string.
1333
1334If the system is already at end of file when you call @code{fgetws}, then
1335the contents of the array @var{ws} are unchanged and a null pointer is
1336returned. A null pointer is also returned if a read error occurs.
1337Otherwise, the return value is the pointer @var{ws}.
1338
1339@strong{Warning:} If the input data has a null wide character (which are
1340null bytes in the input stream), you can't tell. So don't use
1341@code{fgetws} unless you know the data cannot contain a null. Don't use
1342it to read files edited by the user because, if the user inserts a null
1343character, you should either handle it properly or print a clear error
1344message.
1345@comment XXX We need getwline!!!
1346@end deftypefun
1347
7b4161bb 1348@deftypefun {char *} fgets_unlocked (char *@var{s}, int @var{count}, FILE *@var{stream})
d08a7e4c 1349@standards{GNU, stdio.h}
171e9210 1350@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1351The @code{fgets_unlocked} function is equivalent to the @code{fgets}
1dc843f7 1352function except that it does not implicitly lock the stream.
7b4161bb
UD
1353
1354This function is a GNU extension.
1355@end deftypefun
1356
b5e73f56 1357@deftypefun {wchar_t *} fgetws_unlocked (wchar_t *@var{ws}, int @var{count}, FILE *@var{stream})
d08a7e4c 1358@standards{GNU, wchar.h}
171e9210 1359@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
b5e73f56 1360The @code{fgetws_unlocked} function is equivalent to the @code{fgetws}
1dc843f7 1361function except that it does not implicitly lock the stream.
b5e73f56
UD
1362
1363This function is a GNU extension.
1364@end deftypefun
1365
28f540f4 1366@deftypefn {Deprecated function} {char *} gets (char *@var{s})
d08a7e4c 1367@standards{ISO, stdio.h}
171e9210 1368@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1369The function @code{gets} reads characters from the stream @code{stdin}
1370up to the next newline character, and stores them in the string @var{s}.
1371The newline character is discarded (note that this differs from the
1372behavior of @code{fgets}, which copies the newline character into the
1373string). If @code{gets} encounters a read error or end-of-file, it
1374returns a null pointer; otherwise it returns @var{s}.
1375
1376@strong{Warning:} The @code{gets} function is @strong{very dangerous}
1377because it provides no protection against overflowing the string
1f77f049 1378@var{s}. @Theglibc{} includes it for compatibility only. You
28f540f4
RM
1379should @strong{always} use @code{fgets} or @code{getline} instead. To
1380remind you of this, the linker (if using GNU @code{ld}) will issue a
1381warning whenever you use @code{gets}.
1382@end deftypefn
1383
1384@node Unreading
1385@section Unreading
1386@cindex peeking at input
1387@cindex unreading characters
1388@cindex pushing input back
1389
1390In parser programs it is often useful to examine the next character in
1391the input stream without removing it from the stream. This is called
1392``peeking ahead'' at the input because your program gets a glimpse of
1393the input it will read next.
1394
1395Using stream I/O, you can peek ahead at input by first reading it and
19c3f208 1396then @dfn{unreading} it (also called @dfn{pushing it back} on the stream).
28f540f4
RM
1397Unreading a character makes it available to be input again from the stream,
1398by the next call to @code{fgetc} or other input function on that stream.
1399
1400@menu
1401* Unreading Idea:: An explanation of unreading with pictures.
1402* How Unread:: How to call @code{ungetc} to do unreading.
1403@end menu
1404
1405@node Unreading Idea
1406@subsection What Unreading Means
1407
1408Here is a pictorial explanation of unreading. Suppose you have a
1409stream reading a file that contains just six characters, the letters
1410@samp{foobar}. Suppose you have read three characters so far. The
1411situation looks like this:
1412
1413@smallexample
1414f o o b a r
162ba701 1415 ^
28f540f4
RM
1416@end smallexample
1417
1418@noindent
1419so the next input character will be @samp{b}.
1420
1421@c @group Invalid outside @example
1422If instead of reading @samp{b} you unread the letter @samp{o}, you get a
1423situation like this:
1424
1425@smallexample
1426f o o b a r
162ba701 1427 |
28f540f4
RM
1428 o--
1429 ^
1430@end smallexample
1431
1432@noindent
1433so that the next input characters will be @samp{o} and @samp{b}.
1434@c @end group
1435
1436@c @group
1437If you unread @samp{9} instead of @samp{o}, you get this situation:
1438
1439@smallexample
1440f o o b a r
162ba701 1441 |
28f540f4
RM
1442 9--
1443 ^
1444@end smallexample
1445
1446@noindent
1447so that the next input characters will be @samp{9} and @samp{b}.
1448@c @end group
1449
1450@node How Unread
1451@subsection Using @code{ungetc} To Do Unreading
19c3f208 1452
28f540f4
RM
1453The function to unread a character is called @code{ungetc}, because it
1454reverses the action of @code{getc}.
1455
28f540f4 1456@deftypefun int ungetc (int @var{c}, FILE *@var{stream})
d08a7e4c 1457@standards{ISO, stdio.h}
171e9210 1458@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1459The @code{ungetc} function pushes back the character @var{c} onto the
1460input stream @var{stream}. So the next input from @var{stream} will
1461read @var{c} before anything else.
1462
1463If @var{c} is @code{EOF}, @code{ungetc} does nothing and just returns
1464@code{EOF}. This lets you call @code{ungetc} with the return value of
1465@code{getc} without needing to check for an error from @code{getc}.
1466
1467The character that you push back doesn't have to be the same as the last
1468character that was actually read from the stream. In fact, it isn't
1469necessary to actually read any characters from the stream before
f4efd068
UD
1470unreading them with @code{ungetc}! But that is a strange way to write a
1471program; usually @code{ungetc} is used only to unread a character that
1f77f049 1472was just read from the same stream. @Theglibc{} supports this
f4efd068 1473even on files opened in binary mode, but other systems might not.
28f540f4 1474
1f77f049 1475@Theglibc{} only supports one character of pushback---in other
28f540f4
RM
1476words, it does not work to call @code{ungetc} twice without doing input
1477in between. Other systems might let you push back multiple characters;
1478then reading from the stream retrieves the characters in the reverse
1479order that they were pushed.
1480
1481Pushing back characters doesn't alter the file; only the internal
1482buffering for the stream is affected. If a file positioning function
a5a0310d
UD
1483(such as @code{fseek}, @code{fseeko} or @code{rewind}; @pxref{File
1484Positioning}) is called, any pending pushed-back characters are
1485discarded.
28f540f4
RM
1486
1487Unreading a character on a stream that is at end of file clears the
1488end-of-file indicator for the stream, because it makes the character of
1489input available. After you read that character, trying to read again
1490will encounter end of file.
1491@end deftypefun
1492
b5e73f56 1493@deftypefun wint_t ungetwc (wint_t @var{wc}, FILE *@var{stream})
d08a7e4c 1494@standards{ISO, wchar.h}
171e9210 1495@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
b5e73f56
UD
1496The @code{ungetwc} function behaves just like @code{ungetc} just that it
1497pushes back a wide character.
1498@end deftypefun
1499
28f540f4
RM
1500Here is an example showing the use of @code{getc} and @code{ungetc} to
1501skip over whitespace characters. When this function reaches a
1502non-whitespace character, it unreads that character to be seen again on
1503the next read operation on the stream.
1504
1505@smallexample
1506#include <stdio.h>
1507#include <ctype.h>
1508
1509void
1510skip_whitespace (FILE *stream)
1511@{
1512 int c;
1513 do
1514 /* @r{No need to check for @code{EOF} because it is not}
1515 @r{@code{isspace}, and @code{ungetc} ignores @code{EOF}.} */
1516 c = getc (stream);
1517 while (isspace (c));
1518 ungetc (c, stream);
1519@}
1520@end smallexample
1521
1522@node Block Input/Output
1523@section Block Input/Output
1524
1525This section describes how to do input and output operations on blocks
1526of data. You can use these functions to read and write binary data, as
1527well as to read and write text in fixed-size blocks instead of by
1528characters or lines.
1529@cindex binary I/O to a stream
1530@cindex block I/O to a stream
1531@cindex reading from a stream, by blocks
1532@cindex writing to a stream, by blocks
1533
1534Binary files are typically used to read and write blocks of data in the
1535same format as is used to represent the data in a running program. In
1536other words, arbitrary blocks of memory---not just character or string
1537objects---can be written to a binary file, and meaningfully read in
1538again by the same program.
1539
1540Storing data in binary form is often considerably more efficient than
1541using the formatted I/O functions. Also, for floating-point numbers,
1542the binary form avoids possible loss of precision in the conversion
1543process. On the other hand, binary files can't be examined or modified
1544easily using many standard file utilities (such as text editors), and
1545are not portable between different implementations of the language, or
1546different kinds of computers.
1547
1548These functions are declared in @file{stdio.h}.
1549@pindex stdio.h
1550
28f540f4 1551@deftypefun size_t fread (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
d08a7e4c 1552@standards{ISO, stdio.h}
171e9210 1553@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1554This function reads up to @var{count} objects of size @var{size} into
1555the array @var{data}, from the stream @var{stream}. It returns the
1556number of objects actually read, which might be less than @var{count} if
1557a read error occurs or the end of the file is reached. This function
1558returns a value of zero (and doesn't read anything) if either @var{size}
1559or @var{count} is zero.
1560
1561If @code{fread} encounters end of file in the middle of an object, it
1562returns the number of complete objects read, and discards the partial
1563object. Therefore, the stream remains at the actual end of the file.
1564@end deftypefun
1565
7b4161bb 1566@deftypefun size_t fread_unlocked (void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
d08a7e4c 1567@standards{GNU, stdio.h}
171e9210 1568@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1569The @code{fread_unlocked} function is equivalent to the @code{fread}
1dc843f7 1570function except that it does not implicitly lock the stream.
7b4161bb
UD
1571
1572This function is a GNU extension.
1573@end deftypefun
1574
28f540f4 1575@deftypefun size_t fwrite (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
d08a7e4c 1576@standards{ISO, stdio.h}
171e9210 1577@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
1578This function writes up to @var{count} objects of size @var{size} from
1579the array @var{data}, to the stream @var{stream}. The return value is
1580normally @var{count}, if the call succeeds. Any other value indicates
1581some sort of error, such as running out of space.
1582@end deftypefun
1583
7b4161bb 1584@deftypefun size_t fwrite_unlocked (const void *@var{data}, size_t @var{size}, size_t @var{count}, FILE *@var{stream})
d08a7e4c 1585@standards{GNU, stdio.h}
171e9210 1586@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 1587The @code{fwrite_unlocked} function is equivalent to the @code{fwrite}
1dc843f7 1588function except that it does not implicitly lock the stream.
7b4161bb
UD
1589
1590This function is a GNU extension.
1591@end deftypefun
1592
28f540f4
RM
1593@node Formatted Output
1594@section Formatted Output
1595
1596@cindex format string, for @code{printf}
1597@cindex template, for @code{printf}
1598@cindex formatted output to a stream
1599@cindex writing to a stream, formatted
1600The functions described in this section (@code{printf} and related
1601functions) provide a convenient way to perform formatted output. You
1602call @code{printf} with a @dfn{format string} or @dfn{template string}
1603that specifies how to format the values of the remaining arguments.
1604
1605Unless your program is a filter that specifically performs line- or
1606character-oriented processing, using @code{printf} or one of the other
1607related functions described in this section is usually the easiest and
1608most concise way to perform output. These functions are especially
1609useful for printing error messages, tables of data, and the like.
1610
1611@menu
1612* Formatted Output Basics:: Some examples to get you started.
1613* Output Conversion Syntax:: General syntax of conversion
162ba701 1614 specifications.
28f540f4 1615* Table of Output Conversions:: Summary of output conversions and
162ba701 1616 what they do.
28f540f4
RM
1617* Integer Conversions:: Details about formatting of integers.
1618* Floating-Point Conversions:: Details about formatting of
162ba701 1619 floating-point numbers.
28f540f4 1620* Other Output Conversions:: Details about formatting of strings,
162ba701 1621 characters, pointers, and the like.
28f540f4
RM
1622* Formatted Output Functions:: Descriptions of the actual functions.
1623* Dynamic Output:: Functions that allocate memory for the output.
1624* Variable Arguments Output:: @code{vprintf} and friends.
1625* Parsing a Template String:: What kinds of args does a given template
162ba701 1626 call for?
28f540f4
RM
1627* Example of Parsing:: Sample program using @code{parse_printf_format}.
1628@end menu
1629
1630@node Formatted Output Basics
1631@subsection Formatted Output Basics
1632
1633The @code{printf} function can be used to print any number of arguments.
1634The template string argument you supply in a call provides
1635information not only about the number of additional arguments, but also
1636about their types and what style should be used for printing them.
1637
1638Ordinary characters in the template string are simply written to the
1639output stream as-is, while @dfn{conversion specifications} introduced by
1640a @samp{%} character in the template cause subsequent arguments to be
1641formatted and written to the output stream. For example,
1642@cindex conversion specifications (@code{printf})
1643
1644@smallexample
1645int pct = 37;
1646char filename[] = "foo.txt";
1647printf ("Processing of `%s' is %d%% finished.\nPlease be patient.\n",
162ba701 1648 filename, pct);
28f540f4
RM
1649@end smallexample
1650
1651@noindent
1652produces output like
1653
1654@smallexample
1655Processing of `foo.txt' is 37% finished.
1656Please be patient.
1657@end smallexample
1658
1659This example shows the use of the @samp{%d} conversion to specify that
1660an @code{int} argument should be printed in decimal notation, the
1661@samp{%s} conversion to specify printing of a string argument, and
1662the @samp{%%} conversion to print a literal @samp{%} character.
1663
1664There are also conversions for printing an integer argument as an
1665unsigned value in octal, decimal, or hexadecimal radix (@samp{%o},
1666@samp{%u}, or @samp{%x}, respectively); or as a character value
1667(@samp{%c}).
1668
1669Floating-point numbers can be printed in normal, fixed-point notation
1670using the @samp{%f} conversion or in exponential notation using the
1671@samp{%e} conversion. The @samp{%g} conversion uses either @samp{%e}
1672or @samp{%f} format, depending on what is more appropriate for the
1673magnitude of the particular number.
1674
1675You can control formatting more precisely by writing @dfn{modifiers}
1676between the @samp{%} and the character that indicates which conversion
1677to apply. These slightly alter the ordinary behavior of the conversion.
1678For example, most conversion specifications permit you to specify a
1679minimum field width and a flag indicating whether you want the result
1680left- or right-justified within the field.
1681
1682The specific flags and modifiers that are permitted and their
1683interpretation vary depending on the particular conversion. They're all
1684described in more detail in the following sections. Don't worry if this
1685all seems excessively complicated at first; you can almost always get
1686reasonable free-format output without using any of the modifiers at all.
1687The modifiers are mostly used to make the output look ``prettier'' in
1688tables.
1689
1690@node Output Conversion Syntax
1691@subsection Output Conversion Syntax
1692
1693This section provides details about the precise syntax of conversion
1694specifications that can appear in a @code{printf} template
1695string.
1696
390955cb
UD
1697Characters in the template string that are not part of a conversion
1698specification are printed as-is to the output stream. Multibyte
1699character sequences (@pxref{Character Set Handling}) are permitted in a
1700template string.
28f540f4
RM
1701
1702The conversion specifications in a @code{printf} template string have
1703the general form:
1704
f89829da 1705@smallexample
dfd2257a 1706% @r{[} @var{param-no} @r{$]} @var{flags} @var{width} @r{[} . @var{precision} @r{]} @var{type} @var{conversion}
f89829da
UD
1707@end smallexample
1708
1709@noindent
1710or
1711
1712@smallexample
1713% @r{[} @var{param-no} @r{$]} @var{flags} @var{width} . @r{*} @r{[} @var{param-no} @r{$]} @var{type} @var{conversion}
1714@end smallexample
28f540f4
RM
1715
1716For example, in the conversion specifier @samp{%-10.8ld}, the @samp{-}
1717is a flag, @samp{10} specifies the field width, the precision is
1718@samp{8}, the letter @samp{l} is a type modifier, and @samp{d} specifies
1719the conversion style. (This particular type specifier says to
1720print a @code{long int} argument in decimal notation, with a minimum of
17218 digits left-justified in a field at least 10 characters wide.)
1722
1723In more detail, output conversion specifications consist of an
1724initial @samp{%} character followed in sequence by:
1725
1726@itemize @bullet
dfd2257a
UD
1727@item
1728An optional specification of the parameter used for this format.
e8b1163e 1729Normally the parameters to the @code{printf} function are assigned to the
f2ea0f5b 1730formats in the order of appearance in the format string. But in some
dfd2257a 1731situations (such as message translation) this is not desirable and this
e8b1163e 1732extension allows an explicit parameter to be specified.
dfd2257a 1733
f89829da 1734The @var{param-no} parts of the format must be integers in the range of
dfd2257a 17351 to the maximum number of arguments present to the function call. Some
c703cd7a 1736implementations limit this number to a certain upper bound. The exact
dfd2257a
UD
1737limit can be retrieved by the following constant.
1738
1739@defvr Macro NL_ARGMAX
f89829da 1740The value of @code{NL_ARGMAX} is the maximum value allowed for the
9dcc8f11 1741specification of a positional parameter in a @code{printf} call. The
dfd2257a
UD
1742actual value in effect at runtime can be retrieved by using
1743@code{sysconf} using the @code{_SC_NL_ARGMAX} parameter @pxref{Sysconf
1744Definition}.
1745
c703cd7a 1746Some systems have a quite low limit such as @math{9} for @w{System V}
1f77f049 1747systems. @Theglibc{} has no real limit.
dfd2257a
UD
1748@end defvr
1749
1750If any of the formats has a specification for the parameter position all
0bc93a2f 1751of them in the format string shall have one. Otherwise the behavior is
dfd2257a
UD
1752undefined.
1753
19c3f208 1754@item
28f540f4
RM
1755Zero or more @dfn{flag characters} that modify the normal behavior of
1756the conversion specification.
1757@cindex flag character (@code{printf})
1758
19c3f208 1759@item
28f540f4
RM
1760An optional decimal integer specifying the @dfn{minimum field width}.
1761If the normal conversion produces fewer characters than this, the field
1762is padded with spaces to the specified width. This is a @emph{minimum}
1763value; if the normal conversion produces more characters than this, the
1764field is @emph{not} truncated. Normally, the output is right-justified
1765within the field.
1766@cindex minimum field width (@code{printf})
1767
1768You can also specify a field width of @samp{*}. This means that the
1769next argument in the argument list (before the actual value to be
1770printed) is used as the field width. The value must be an @code{int}.
1771If the value is negative, this means to set the @samp{-} flag (see
1772below) and to use the absolute value as the field width.
1773
19c3f208 1774@item
28f540f4
RM
1775An optional @dfn{precision} to specify the number of digits to be
1776written for the numeric conversions. If the precision is specified, it
1777consists of a period (@samp{.}) followed optionally by a decimal integer
1778(which defaults to zero if omitted).
1779@cindex precision (@code{printf})
1780
1781You can also specify a precision of @samp{*}. This means that the next
1782argument in the argument list (before the actual value to be printed) is
1783used as the precision. The value must be an @code{int}, and is ignored
1784if it is negative. If you specify @samp{*} for both the field width and
1785precision, the field width argument precedes the precision argument.
1786Other C library versions may not recognize this syntax.
1787
1788@item
1789An optional @dfn{type modifier character}, which is used to specify the
1790data type of the corresponding argument if it differs from the default
1791type. (For example, the integer conversions assume a type of @code{int},
1792but you can specify @samp{h}, @samp{l}, or @samp{L} for other integer
1793types.)
1794@cindex type modifier character (@code{printf})
1795
1796@item
1797A character that specifies the conversion to be applied.
1798@end itemize
1799
19c3f208 1800The exact options that are permitted and how they are interpreted vary
28f540f4
RM
1801between the different conversion specifiers. See the descriptions of the
1802individual conversions for information about the particular options that
1803they use.
1804
1805With the @samp{-Wformat} option, the GNU C compiler checks calls to
1806@code{printf} and related functions. It examines the format string and
1807verifies that the correct number and types of arguments are supplied.
1808There is also a GNU C syntax to tell the compiler that a function you
19c3f208 1809write uses a @code{printf}-style format string.
28f540f4 1810@xref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 1811gcc, Using GNU CC}, for more information.
28f540f4
RM
1812
1813@node Table of Output Conversions
1814@subsection Table of Output Conversions
1815@cindex output conversions, for @code{printf}
1816
1817Here is a table summarizing what all the different conversions do:
1818
1819@table @asis
1820@item @samp{%d}, @samp{%i}
1821Print an integer as a signed decimal number. @xref{Integer
1822Conversions}, for details. @samp{%d} and @samp{%i} are synonymous for
1823output, but are different when used with @code{scanf} for input
1824(@pxref{Table of Input Conversions}).
1825
1826@item @samp{%o}
1827Print an integer as an unsigned octal number. @xref{Integer
1828Conversions}, for details.
1829
1830@item @samp{%u}
1831Print an integer as an unsigned decimal number. @xref{Integer
1832Conversions}, for details.
1833
1834@item @samp{%x}, @samp{%X}
1835Print an integer as an unsigned hexadecimal number. @samp{%x} uses
1836lower-case letters and @samp{%X} uses upper-case. @xref{Integer
1837Conversions}, for details.
1838
1839@item @samp{%f}
1840Print a floating-point number in normal (fixed-point) notation.
1841@xref{Floating-Point Conversions}, for details.
1842
1843@item @samp{%e}, @samp{%E}
1844Print a floating-point number in exponential notation. @samp{%e} uses
1845lower-case letters and @samp{%E} uses upper-case. @xref{Floating-Point
1846Conversions}, for details.
1847
1848@item @samp{%g}, @samp{%G}
1849Print a floating-point number in either normal or exponential notation,
1850whichever is more appropriate for its magnitude. @samp{%g} uses
1851lower-case letters and @samp{%G} uses upper-case. @xref{Floating-Point
1852Conversions}, for details.
1853
2f6d1f1b 1854@item @samp{%a}, @samp{%A}
c703cd7a 1855Print a floating-point number in a hexadecimal fractional notation with
2f6d1f1b
UD
1856the exponent to base 2 represented in decimal digits. @samp{%a} uses
1857lower-case letters and @samp{%A} uses upper-case. @xref{Floating-Point
1858Conversions}, for details.
1859
28f540f4
RM
1860@item @samp{%c}
1861Print a single character. @xref{Other Output Conversions}.
1862
b5e73f56
UD
1863@item @samp{%C}
1864This is an alias for @samp{%lc} which is supported for compatibility
1865with the Unix standard.
1866
28f540f4
RM
1867@item @samp{%s}
1868Print a string. @xref{Other Output Conversions}.
1869
b5e73f56
UD
1870@item @samp{%S}
1871This is an alias for @samp{%ls} which is supported for compatibility
1872with the Unix standard.
1873
28f540f4
RM
1874@item @samp{%p}
1875Print the value of a pointer. @xref{Other Output Conversions}.
1876
1877@item @samp{%n}
1878Get the number of characters printed so far. @xref{Other Output Conversions}.
1879Note that this conversion specification never produces any output.
1880
1881@item @samp{%m}
1882Print the string corresponding to the value of @code{errno}.
1883(This is a GNU extension.)
1884@xref{Other Output Conversions}.
1885
1886@item @samp{%%}
1887Print a literal @samp{%} character. @xref{Other Output Conversions}.
1888@end table
1889
1890If the syntax of a conversion specification is invalid, unpredictable
1891things will happen, so don't do this. If there aren't enough function
1892arguments provided to supply values for all the conversion
1893specifications in the template string, or if the arguments are not of
1894the correct types, the results are unpredictable. If you supply more
1895arguments than conversion specifications, the extra argument values are
1896simply ignored; this is sometimes useful.
1897
1898@node Integer Conversions
1899@subsection Integer Conversions
1900
1901This section describes the options for the @samp{%d}, @samp{%i},
1902@samp{%o}, @samp{%u}, @samp{%x}, and @samp{%X} conversion
1903specifications. These conversions print integers in various formats.
1904
1905The @samp{%d} and @samp{%i} conversion specifications both print an
1906@code{int} argument as a signed decimal number; while @samp{%o},
1907@samp{%u}, and @samp{%x} print the argument as an unsigned octal,
1908decimal, or hexadecimal number (respectively). The @samp{%X} conversion
1909specification is just like @samp{%x} except that it uses the characters
1910@samp{ABCDEF} as digits instead of @samp{abcdef}.
1911
1912The following flags are meaningful:
1913
1914@table @asis
1915@item @samp{-}
1916Left-justify the result in the field (instead of the normal
1917right-justification).
1918
1919@item @samp{+}
1920For the signed @samp{%d} and @samp{%i} conversions, print a
1921plus sign if the value is positive.
1922
1923@item @samp{ }
1924For the signed @samp{%d} and @samp{%i} conversions, if the result
1925doesn't start with a plus or minus sign, prefix it with a space
1926character instead. Since the @samp{+} flag ensures that the result
1927includes a sign, this flag is ignored if you supply both of them.
1928
1929@item @samp{#}
1930For the @samp{%o} conversion, this forces the leading digit to be
1931@samp{0}, as if by increasing the precision. For @samp{%x} or
1932@samp{%X}, this prefixes a leading @samp{0x} or @samp{0X} (respectively)
1933to the result. This doesn't do anything useful for the @samp{%d},
1934@samp{%i}, or @samp{%u} conversions. Using this flag produces output
1935which can be parsed by the @code{strtoul} function (@pxref{Parsing of
1936Integers}) and @code{scanf} with the @samp{%i} conversion
1937(@pxref{Numeric Input Conversions}).
1938
1939@item @samp{'}
1940Separate the digits into groups as specified by the locale specified for
1941the @code{LC_NUMERIC} category; @pxref{General Numeric}. This flag is a
1942GNU extension.
1943
1944@item @samp{0}
1945Pad the field with zeros instead of spaces. The zeros are placed after
1946any indication of sign or base. This flag is ignored if the @samp{-}
1947flag is also specified, or if a precision is specified.
1948@end table
1949
1950If a precision is supplied, it specifies the minimum number of digits to
1951appear; leading zeros are produced if necessary. If you don't specify a
1952precision, the number is printed with as many digits as it needs. If
1953you convert a value of zero with an explicit precision of zero, then no
1954characters at all are produced.
1955
1956Without a type modifier, the corresponding argument is treated as an
1957@code{int} (for the signed conversions @samp{%i} and @samp{%d}) or
1958@code{unsigned int} (for the unsigned conversions @samp{%o}, @samp{%u},
1959@samp{%x}, and @samp{%X}). Recall that since @code{printf} and friends
1960are variadic, any @code{char} and @code{short} arguments are
1961automatically converted to @code{int} by the default argument
1962promotions. For arguments of other integer types, you can use these
1963modifiers:
1964
1965@table @samp
cc3fa755
UD
1966@item hh
1967Specifies that the argument is a @code{signed char} or @code{unsigned
1968char}, as appropriate. A @code{char} argument is converted to an
1969@code{int} or @code{unsigned int} by the default argument promotions
c703cd7a 1970anyway, but the @samp{hh} modifier says to convert it back to a
cc3fa755
UD
1971@code{char} again.
1972
ec751a23 1973This modifier was introduced in @w{ISO C99}.
e852e889 1974
28f540f4
RM
1975@item h
1976Specifies that the argument is a @code{short int} or @code{unsigned
1977short int}, as appropriate. A @code{short} argument is converted to an
1978@code{int} or @code{unsigned int} by the default argument promotions
1979anyway, but the @samp{h} modifier says to convert it back to a
1980@code{short} again.
1981
e852e889
UD
1982@item j
1983Specifies that the argument is a @code{intmax_t} or @code{uintmax_t}, as
1984appropriate.
1985
ec751a23 1986This modifier was introduced in @w{ISO C99}.
e852e889 1987
28f540f4
RM
1988@item l
1989Specifies that the argument is a @code{long int} or @code{unsigned long
c703cd7a 1990int}, as appropriate. Two @samp{l} characters are like the @samp{L}
28f540f4
RM
1991modifier, below.
1992
b5e73f56
UD
1993If used with @samp{%c} or @samp{%s} the corresponding parameter is
1994considered as a wide character or wide character string respectively.
1995This use of @samp{l} was introduced in @w{Amendment 1} to @w{ISO C90}.
1996
28f540f4
RM
1997@item L
1998@itemx ll
1999@itemx q
2000Specifies that the argument is a @code{long long int}. (This type is
2001an extension supported by the GNU C compiler. On systems that don't
2002support extra-long integers, this is the same as @code{long int}.)
2003
2004The @samp{q} modifier is another name for the same thing, which comes
2005from 4.4 BSD; a @w{@code{long long int}} is sometimes called a ``quad''
2006@code{int}.
2007
e852e889
UD
2008@item t
2009Specifies that the argument is a @code{ptrdiff_t}.
2010
ec751a23 2011This modifier was introduced in @w{ISO C99}.
e852e889
UD
2012
2013@item z
2014@itemx Z
2015Specifies that the argument is a @code{size_t}.
2016
ec751a23 2017@samp{z} was introduced in @w{ISO C99}. @samp{Z} is a GNU extension
0be8752b 2018predating this addition and should not be used in new code.
28f540f4
RM
2019@end table
2020
2021Here is an example. Using the template string:
2022
2023@smallexample
2024"|%5d|%-5d|%+5d|%+-5d|% 5d|%05d|%5.0d|%5.2d|%d|\n"
2025@end smallexample
2026
2027@noindent
2028to print numbers using the different options for the @samp{%d}
2029conversion gives results like:
2030
2031@smallexample
2032| 0|0 | +0|+0 | 0|00000| | 00|0|
2033| 1|1 | +1|+1 | 1|00001| 1| 01|1|
2034| -1|-1 | -1|-1 | -1|-0001| -1| -01|-1|
776e8492 2035|100000|100000|+100000|+100000| 100000|100000|100000|100000|100000|
28f540f4
RM
2036@end smallexample
2037
2038In particular, notice what happens in the last case where the number
2039is too large to fit in the minimum field width specified.
2040
2041Here are some more examples showing how unsigned integers print under
2042various format options, using the template string:
2043
2044@smallexample
2045"|%5u|%5o|%5x|%5X|%#5o|%#5x|%#5X|%#10.8x|\n"
2046@end smallexample
2047
2048@smallexample
776e8492 2049| 0| 0| 0| 0| 0| 0| 0| 00000000|
28f540f4
RM
2050| 1| 1| 1| 1| 01| 0x1| 0X1|0x00000001|
2051|100000|303240|186a0|186A0|0303240|0x186a0|0X186A0|0x000186a0|
2052@end smallexample
2053
2054
2055@node Floating-Point Conversions
2056@subsection Floating-Point Conversions
2057
2058This section discusses the conversion specifications for floating-point
2059numbers: the @samp{%f}, @samp{%e}, @samp{%E}, @samp{%g}, and @samp{%G}
2060conversions.
2061
2062The @samp{%f} conversion prints its argument in fixed-point notation,
2063producing output of the form
2064@w{[@code{-}]@var{ddd}@code{.}@var{ddd}},
2065where the number of digits following the decimal point is controlled
2066by the precision you specify.
2067
2068The @samp{%e} conversion prints its argument in exponential notation,
2069producing output of the form
2070@w{[@code{-}]@var{d}@code{.}@var{ddd}@code{e}[@code{+}|@code{-}]@var{dd}}.
2071Again, the number of digits following the decimal point is controlled by
2072the precision. The exponent always contains at least two digits. The
2073@samp{%E} conversion is similar but the exponent is marked with the letter
2074@samp{E} instead of @samp{e}.
2075
2076The @samp{%g} and @samp{%G} conversions print the argument in the style
2077of @samp{%e} or @samp{%E} (respectively) if the exponent would be less
776e8492 2078than -4 or greater than or equal to the precision; otherwise they use
11bf311e 2079the @samp{%f} style. A precision of @code{0}, is taken as 1.
776e8492
AJ
2080Trailing zeros are removed from the fractional portion of the result and
2081a decimal-point character appears only if it is followed by a digit.
28f540f4 2082
2f6d1f1b 2083The @samp{%a} and @samp{%A} conversions are meant for representing
0be8752b 2084floating-point numbers exactly in textual form so that they can be
2f6d1f1b 2085exchanged as texts between different programs and/or machines. The
c703cd7a 2086numbers are represented in the form
2f6d1f1b
UD
2087@w{[@code{-}]@code{0x}@var{h}@code{.}@var{hhh}@code{p}[@code{+}|@code{-}]@var{dd}}.
2088At the left of the decimal-point character exactly one digit is print.
91ea72b7 2089This character is only @code{0} if the number is denormalized.
49c091e5 2090Otherwise the value is unspecified; it is implementation dependent how many
2f6d1f1b
UD
2091bits are used. The number of hexadecimal digits on the right side of
2092the decimal-point character is equal to the precision. If the precision
2093is zero it is determined to be large enough to provide an exact
2094representation of the number (or it is large enough to distinguish two
2095adjacent values if the @code{FLT_RADIX} is not a power of 2,
91ea72b7 2096@pxref{Floating Point Parameters}). For the @samp{%a} conversion
2f6d1f1b
UD
2097lower-case characters are used to represent the hexadecimal number and
2098the prefix and exponent sign are printed as @code{0x} and @code{p}
2099respectively. Otherwise upper-case characters are used and @code{0X}
2100and @code{P} are used for the representation of prefix and exponent
2101string. The exponent to the base of two is printed as a decimal number
2102using at least one digit but at most as many digits as necessary to
2103represent the value exactly.
2104
2105If the value to be printed represents infinity or a NaN, the output is
2106@w{[@code{-}]@code{inf}} or @code{nan} respectively if the conversion
2107specifier is @samp{%a}, @samp{%e}, @samp{%f}, or @samp{%g} and it is
2108@w{[@code{-}]@code{INF}} or @code{NAN} respectively if the conversion is
2109@samp{%A}, @samp{%E}, or @samp{%G}.
2110
28f540f4
RM
2111The following flags can be used to modify the behavior:
2112
2113@comment We use @asis instead of @samp so we can have ` ' as an item.
2114@table @asis
2115@item @samp{-}
2116Left-justify the result in the field. Normally the result is
2117right-justified.
2118
2119@item @samp{+}
2120Always include a plus or minus sign in the result.
2121
2122@item @samp{ }
2123If the result doesn't start with a plus or minus sign, prefix it with a
2124space instead. Since the @samp{+} flag ensures that the result includes
2125a sign, this flag is ignored if you supply both of them.
2126
2127@item @samp{#}
2128Specifies that the result should always include a decimal point, even
2129if no digits follow it. For the @samp{%g} and @samp{%G} conversions,
2130this also forces trailing zeros after the decimal point to be left
2131in place where they would otherwise be removed.
2132
2133@item @samp{'}
2134Separate the digits of the integer part of the result into groups as
2135specified by the locale specified for the @code{LC_NUMERIC} category;
2136@pxref{General Numeric}. This flag is a GNU extension.
2137
2138@item @samp{0}
2139Pad the field with zeros instead of spaces; the zeros are placed
2140after any sign. This flag is ignored if the @samp{-} flag is also
2141specified.
2142@end table
2143
2144The precision specifies how many digits follow the decimal-point
2145character for the @samp{%f}, @samp{%e}, and @samp{%E} conversions. For
2146these conversions, the default precision is @code{6}. If the precision
2147is explicitly @code{0}, this suppresses the decimal point character
2148entirely. For the @samp{%g} and @samp{%G} conversions, the precision
2149specifies how many significant digits to print. Significant digits are
2150the first digit before the decimal point, and all the digits after it.
91ea72b7 2151If the precision is @code{0} or not specified for @samp{%g} or @samp{%G},
28f540f4
RM
2152it is treated like a value of @code{1}. If the value being printed
2153cannot be expressed accurately in the specified number of digits, the
2154value is rounded to the nearest number that fits.
2155
2156Without a type modifier, the floating-point conversions use an argument
2157of type @code{double}. (By the default argument promotions, any
2158@code{float} arguments are automatically converted to @code{double}.)
2159The following type modifier is supported:
2160
2161@table @samp
2162@item L
2163An uppercase @samp{L} specifies that the argument is a @code{long
2164double}.
2165@end table
2166
2167Here are some examples showing how numbers print using the various
2168floating-point conversions. All of the numbers were printed using
2169this template string:
2170
2171@smallexample
2f6d1f1b 2172"|%13.4a|%13.4f|%13.4e|%13.4g|\n"
28f540f4
RM
2173@end smallexample
2174
2175Here is the output:
2176
2177@smallexample
2f6d1f1b
UD
2178| 0x0.0000p+0| 0.0000| 0.0000e+00| 0|
2179| 0x1.0000p-1| 0.5000| 5.0000e-01| 0.5|
2180| 0x1.0000p+0| 1.0000| 1.0000e+00| 1|
2181| -0x1.0000p+0| -1.0000| -1.0000e+00| -1|
2182| 0x1.9000p+6| 100.0000| 1.0000e+02| 100|
2183| 0x1.f400p+9| 1000.0000| 1.0000e+03| 1000|
2184| 0x1.3880p+13| 10000.0000| 1.0000e+04| 1e+04|
2185| 0x1.81c8p+13| 12345.0000| 1.2345e+04| 1.234e+04|
2186| 0x1.86a0p+16| 100000.0000| 1.0000e+05| 1e+05|
2187| 0x1.e240p+16| 123456.0000| 1.2346e+05| 1.235e+05|
28f540f4
RM
2188@end smallexample
2189
2190Notice how the @samp{%g} conversion drops trailing zeros.
2191
2192@node Other Output Conversions
2193@subsection Other Output Conversions
2194
2195This section describes miscellaneous conversions for @code{printf}.
2196
b5e73f56
UD
2197The @samp{%c} conversion prints a single character. In case there is no
2198@samp{l} modifier the @code{int} argument is first converted to an
2199@code{unsigned char}. Then, if used in a wide stream function, the
2200character is converted into the corresponding wide character. The
2201@samp{-} flag can be used to specify left-justification in the field,
2202but no other flags are defined, and no precision or type modifier can be
2203given. For example:
28f540f4
RM
2204
2205@smallexample
2206printf ("%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o');
2207@end smallexample
2208
2209@noindent
2210prints @samp{hello}.
2211
c703cd7a 2212If there is an @samp{l} modifier present the argument is expected to be
b5e73f56
UD
2213of type @code{wint_t}. If used in a multibyte function the wide
2214character is converted into a multibyte character before being added to
2215the output. In this case more than one output byte can be produced.
2216
2217The @samp{%s} conversion prints a string. If no @samp{l} modifier is
2218present the corresponding argument must be of type @code{char *} (or
2219@code{const char *}). If used in a wide stream function the string is
c703cd7a 2220first converted to a wide character string. A precision can be
b5e73f56 2221specified to indicate the maximum number of characters to write;
28f540f4
RM
2222otherwise characters in the string up to but not including the
2223terminating null character are written to the output stream. The
2224@samp{-} flag can be used to specify left-justification in the field,
2225but no other flags or type modifiers are defined for this conversion.
2226For example:
2227
2228@smallexample
2229printf ("%3s%-6s", "no", "where");
2230@end smallexample
2231
2232@noindent
2233prints @samp{ nowhere }.
2234
c703cd7a
RJ
2235If there is an @samp{l} modifier present, the argument is expected to
2236be of type @code{wchar_t} (or @code{const wchar_t *}).
b5e73f56 2237
28f540f4 2238If you accidentally pass a null pointer as the argument for a @samp{%s}
1f77f049 2239conversion, @theglibc{} prints it as @samp{(null)}. We think this
28f540f4
RM
2240is more useful than crashing. But it's not good practice to pass a null
2241argument intentionally.
2242
2243The @samp{%m} conversion prints the string corresponding to the error
2244code in @code{errno}. @xref{Error Messages}. Thus:
2245
2246@smallexample
2247fprintf (stderr, "can't open `%s': %m\n", filename);
2248@end smallexample
2249
2250@noindent
2251is equivalent to:
2252
2253@smallexample
2254fprintf (stderr, "can't open `%s': %s\n", filename, strerror (errno));
2255@end smallexample
2256
2257@noindent
1f77f049 2258The @samp{%m} conversion is a @glibcadj{} extension.
28f540f4
RM
2259
2260The @samp{%p} conversion prints a pointer value. The corresponding
2261argument must be of type @code{void *}. In practice, you can use any
2262type of pointer.
2263
a7a93d50 2264In @theglibc{}, non-null pointers are printed as unsigned integers,
28f540f4
RM
2265as if a @samp{%#x} conversion were used. Null pointers print as
2266@samp{(nil)}. (Pointers might print differently in other systems.)
2267
2268For example:
2269
2270@smallexample
2271printf ("%p", "testing");
2272@end smallexample
2273
2274@noindent
2275prints @samp{0x} followed by a hexadecimal number---the address of the
2276string constant @code{"testing"}. It does not print the word
2277@samp{testing}.
2278
2279You can supply the @samp{-} flag with the @samp{%p} conversion to
2280specify left-justification, but no other flags, precision, or type
2281modifiers are defined.
2282
2283The @samp{%n} conversion is unlike any of the other output conversions.
2284It uses an argument which must be a pointer to an @code{int}, but
2285instead of printing anything it stores the number of characters printed
2286so far by this call at that location. The @samp{h} and @samp{l} type
2287modifiers are permitted to specify that the argument is of type
2288@code{short int *} or @code{long int *} instead of @code{int *}, but no
2289flags, field width, or precision are permitted.
2290
2291For example,
2292
2293@smallexample
2294int nchar;
2295printf ("%d %s%n\n", 3, "bears", &nchar);
2296@end smallexample
2297
2298@noindent
2299prints:
2300
2301@smallexample
23023 bears
2303@end smallexample
2304
2305@noindent
19c3f208 2306and sets @code{nchar} to @code{7}, because @samp{3 bears} is seven
28f540f4
RM
2307characters.
2308
2309
2310The @samp{%%} conversion prints a literal @samp{%} character. This
2311conversion doesn't use an argument, and no flags, field width,
2312precision, or type modifiers are permitted.
2313
2314
2315@node Formatted Output Functions
2316@subsection Formatted Output Functions
2317
2318This section describes how to call @code{printf} and related functions.
2319Prototypes for these functions are in the header file @file{stdio.h}.
2320Because these functions take a variable number of arguments, you
2321@emph{must} declare prototypes for them before using them. Of course,
2322the easiest way to make sure you have all the right prototypes is to
2323just include @file{stdio.h}.
2324@pindex stdio.h
2325
28f540f4 2326@deftypefun int printf (const char *@var{template}, @dots{})
d08a7e4c 2327@standards{ISO, stdio.h}
171e9210 2328@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
2329The @code{printf} function prints the optional arguments under the
2330control of the template string @var{template} to the stream
2331@code{stdout}. It returns the number of characters printed, or a
2332negative value if there was an output error.
2333@end deftypefun
2334
b5e73f56 2335@deftypefun int wprintf (const wchar_t *@var{template}, @dots{})
d08a7e4c 2336@standards{ISO, wchar.h}
171e9210 2337@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
2338The @code{wprintf} function prints the optional arguments under the
2339control of the wide template string @var{template} to the stream
2340@code{stdout}. It returns the number of wide characters printed, or a
2341negative value if there was an output error.
2342@end deftypefun
2343
28f540f4 2344@deftypefun int fprintf (FILE *@var{stream}, const char *@var{template}, @dots{})
d08a7e4c 2345@standards{ISO, stdio.h}
171e9210 2346@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
2347This function is just like @code{printf}, except that the output is
2348written to the stream @var{stream} instead of @code{stdout}.
2349@end deftypefun
2350
b5e73f56 2351@deftypefun int fwprintf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
d08a7e4c 2352@standards{ISO, wchar.h}
171e9210 2353@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
2354This function is just like @code{wprintf}, except that the output is
2355written to the stream @var{stream} instead of @code{stdout}.
2356@end deftypefun
2357
28f540f4 2358@deftypefun int sprintf (char *@var{s}, const char *@var{template}, @dots{})
d08a7e4c 2359@standards{ISO, stdio.h}
171e9210 2360@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2361This is like @code{printf}, except that the output is stored in the character
2362array @var{s} instead of written to a stream. A null character is written
2363to mark the end of the string.
2364
2365The @code{sprintf} function returns the number of characters stored in
2366the array @var{s}, not including the terminating null character.
2367
2368The behavior of this function is undefined if copying takes place
2369between objects that overlap---for example, if @var{s} is also given
2370as an argument to be printed under control of the @samp{%s} conversion.
0a13c9e9 2371@xref{Copying Strings and Arrays}.
28f540f4
RM
2372
2373@strong{Warning:} The @code{sprintf} function can be @strong{dangerous}
2374because it can potentially output more characters than can fit in the
2375allocation size of the string @var{s}. Remember that the field width
2376given in a conversion specification is only a @emph{minimum} value.
2377
2378To avoid this problem, you can use @code{snprintf} or @code{asprintf},
2379described below.
2380@end deftypefun
2381
c703cd7a 2382@deftypefun int swprintf (wchar_t *@var{ws}, size_t @var{size}, const wchar_t *@var{template}, @dots{})
d08a7e4c 2383@standards{GNU, wchar.h}
171e9210 2384@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
2385This is like @code{wprintf}, except that the output is stored in the
2386wide character array @var{ws} instead of written to a stream. A null
2387wide character is written to mark the end of the string. The @var{size}
2388argument specifies the maximum number of characters to produce. The
2389trailing null character is counted towards this limit, so you should
2390allocate at least @var{size} wide characters for the string @var{ws}.
2391
2f278c94
UD
2392The return value is the number of characters generated for the given
2393input, excluding the trailing null. If not all output fits into the
2394provided buffer a negative value is returned. You should try again with
2395a bigger output string. @emph{Note:} this is different from how
2396@code{snprintf} handles this situation.
b5e73f56
UD
2397
2398Note that the corresponding narrow stream function takes fewer
2399parameters. @code{swprintf} in fact corresponds to the @code{snprintf}
2400function. Since the @code{sprintf} function can be dangerous and should
2401be avoided the @w{ISO C} committee refused to make the same mistake
9dcc8f11 2402again and decided to not define a function exactly corresponding to
b5e73f56
UD
2403@code{sprintf}.
2404@end deftypefun
2405
28f540f4 2406@deftypefun int snprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, @dots{})
d08a7e4c 2407@standards{GNU, stdio.h}
171e9210 2408@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2409The @code{snprintf} function is similar to @code{sprintf}, except that
2410the @var{size} argument specifies the maximum number of characters to
2411produce. The trailing null character is counted towards this limit, so
2412you should allocate at least @var{size} characters for the string @var{s}.
42443a47
JL
2413If @var{size} is zero, nothing, not even the null byte, shall be written and
2414@var{s} may be a null pointer.
28f540f4 2415
fe7bdd63 2416The return value is the number of characters which would be generated
da2d1bc5 2417for the given input, excluding the trailing null. If this value is
c703cd7a 2418greater than or equal to @var{size}, not all characters from the result have
da2d1bc5
UD
2419been stored in @var{s}. You should try again with a bigger output
2420string. Here is an example of doing this:
28f540f4
RM
2421
2422@smallexample
2423@group
2424/* @r{Construct a message describing the value of a variable}
2425 @r{whose name is @var{name} and whose value is @var{value}.} */
2426char *
2427make_message (char *name, char *value)
2428@{
2429 /* @r{Guess we need no more than 100 chars of space.} */
2430 int size = 100;
2431 char *buffer = (char *) xmalloc (size);
4cca6b86 2432 int nchars;
28f540f4
RM
2433@end group
2434@group
7ba73c63
UD
2435 if (buffer == NULL)
2436 return NULL;
2437
4cca6b86
UD
2438 /* @r{Try to print in the allocated space.} */
2439 nchars = snprintf (buffer, size, "value of %s is %s",
162ba701 2440 name, value);
4cca6b86
UD
2441@end group
2442@group
fe7bdd63 2443 if (nchars >= size)
28f540f4 2444 @{
4b8f94d3 2445 /* @r{Reallocate buffer now that we know
162ba701 2446 how much space is needed.} */
53631fa8
UD
2447 size = nchars + 1;
2448 buffer = (char *) xrealloc (buffer, size);
4cca6b86 2449
7ba73c63 2450 if (buffer != NULL)
162ba701
PIM
2451 /* @r{Try again.} */
2452 snprintf (buffer, size, "value of %s is %s",
2453 name, value);
28f540f4 2454 @}
4cca6b86
UD
2455 /* @r{The last call worked, return the string.} */
2456 return buffer;
28f540f4
RM
2457@}
2458@end group
2459@end smallexample
2460
2461In practice, it is often easier just to use @code{asprintf}, below.
fb971363 2462
1f77f049 2463@strong{Attention:} In versions of @theglibc{} prior to 2.1 the
5a74e68a
UD
2464return value is the number of characters stored, not including the
2465terminating null; unless there was not enough space in @var{s} to
2466store the result in which case @code{-1} is returned. This was
2467changed in order to comply with the @w{ISO C99} standard.
28f540f4
RM
2468@end deftypefun
2469
2470@node Dynamic Output
2471@subsection Dynamically Allocating Formatted Output
2472
2473The functions in this section do formatted output and place the results
2474in dynamically allocated memory.
2475
28f540f4 2476@deftypefun int asprintf (char **@var{ptr}, const char *@var{template}, @dots{})
d08a7e4c 2477@standards{GNU, stdio.h}
171e9210 2478@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2479This function is similar to @code{sprintf}, except that it dynamically
2480allocates a string (as with @code{malloc}; @pxref{Unconstrained
2481Allocation}) to hold the output, instead of putting the output in a
2482buffer you allocate in advance. The @var{ptr} argument should be the
3a4e0609
UD
2483address of a @code{char *} object, and a successful call to
2484@code{asprintf} stores a pointer to the newly allocated string at that
2485location.
28f540f4 2486
7ba73c63 2487The return value is the number of characters allocated for the buffer, or
cf822e3c 2488less than zero if an error occurred. Usually this means that the buffer
7ba73c63
UD
2489could not be allocated.
2490
28f540f4
RM
2491Here is how to use @code{asprintf} to get the same result as the
2492@code{snprintf} example, but more easily:
2493
2494@smallexample
2495/* @r{Construct a message describing the value of a variable}
2496 @r{whose name is @var{name} and whose value is @var{value}.} */
2497char *
2498make_message (char *name, char *value)
2499@{
2500 char *result;
7ba73c63
UD
2501 if (asprintf (&result, "value of %s is %s", name, value) < 0)
2502 return NULL;
28f540f4
RM
2503 return result;
2504@}
2505@end smallexample
2506@end deftypefun
2507
28f540f4 2508@deftypefun int obstack_printf (struct obstack *@var{obstack}, const char *@var{template}, @dots{})
d08a7e4c 2509@standards{GNU, stdio.h}
171e9210 2510@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
28f540f4
RM
2511This function is similar to @code{asprintf}, except that it uses the
2512obstack @var{obstack} to allocate the space. @xref{Obstacks}.
2513
2514The characters are written onto the end of the current object.
2515To get at them, you must finish the object with @code{obstack_finish}
2516(@pxref{Growing Objects}).@refill
2517@end deftypefun
2518
2519@node Variable Arguments Output
2520@subsection Variable Arguments Output Functions
2521
2522The functions @code{vprintf} and friends are provided so that you can
2523define your own variadic @code{printf}-like functions that make use of
2524the same internals as the built-in formatted output functions.
2525
2526The most natural way to define such functions would be to use a language
2527construct to say, ``Call @code{printf} and pass this template plus all
2528of my arguments after the first five.'' But there is no way to do this
2529in C, and it would be hard to provide a way, since at the C language
2530level there is no way to tell how many arguments your function received.
2531
2532Since that method is impossible, we provide alternative functions, the
2533@code{vprintf} series, which lets you pass a @code{va_list} to describe
2534``all of my arguments after the first five.''
2535
19c3f208 2536When it is sufficient to define a macro rather than a real function,
28f540f4
RM
2537the GNU C compiler provides a way to do this much more easily with macros.
2538For example:
2539
2540@smallexample
838e5ffe 2541#define myprintf(a, b, c, d, e, rest...) \
162ba701 2542 printf (mytemplate , ## rest)
28f540f4
RM
2543@end smallexample
2544
2545@noindent
9229b83e
RM
2546@xref{Variadic Macros,,, cpp, The C preprocessor}, for details.
2547But this is limited to macros, and does not apply to real functions at all.
28f540f4
RM
2548
2549Before calling @code{vprintf} or the other functions listed in this
2550section, you @emph{must} call @code{va_start} (@pxref{Variadic
2551Functions}) to initialize a pointer to the variable arguments. Then you
2552can call @code{va_arg} to fetch the arguments that you want to handle
2553yourself. This advances the pointer past those arguments.
2554
2555Once your @code{va_list} pointer is pointing at the argument of your
2556choice, you are ready to call @code{vprintf}. That argument and all
2557subsequent arguments that were passed to your function are used by
2558@code{vprintf} along with the template that you specified separately.
2559
f546f87c
FW
2560@strong{Portability Note:} The value of the @code{va_list} pointer is
2561undetermined after the call to @code{vprintf}, so you must not use
2562@code{va_arg} after you call @code{vprintf}. Instead, you should call
2563@code{va_end} to retire the pointer from service. You can call
2564@code{va_start} again and begin fetching the arguments from the start of
2565the variable argument list. (Alternatively, you can use @code{va_copy}
2566to make a copy of the @code{va_list} pointer before calling
2567@code{vfprintf}.) Calling @code{vprintf} does not destroy the argument
2568list of your function, merely the particular pointer that you passed to
2569it.
28f540f4
RM
2570
2571Prototypes for these functions are declared in @file{stdio.h}.
2572@pindex stdio.h
2573
28f540f4 2574@deftypefun int vprintf (const char *@var{template}, va_list @var{ap})
d08a7e4c 2575@standards{ISO, stdio.h}
171e9210 2576@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
2577This function is similar to @code{printf} except that, instead of taking
2578a variable number of arguments directly, it takes an argument list
2579pointer @var{ap}.
2580@end deftypefun
2581
b5e73f56 2582@deftypefun int vwprintf (const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 2583@standards{ISO, wchar.h}
171e9210 2584@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
2585This function is similar to @code{wprintf} except that, instead of taking
2586a variable number of arguments directly, it takes an argument list
2587pointer @var{ap}.
2588@end deftypefun
2589
28f540f4 2590@deftypefun int vfprintf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
d08a7e4c 2591@standards{ISO, stdio.h}
171e9210
AO
2592@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
2593@c Although vfprintf sets up a cleanup region to release the lock on the
2594@c output stream, it doesn't use it to release args_value or string in
2595@c case of cancellation. This doesn't make it unsafe, but cancelling it
2596@c may leak memory. The unguarded use of __printf_function_table is
2597@c also of concern for all callers.
2598@c _itoa ok
2599@c _udiv_qrnnd_preinv ok
2600@c group_number ok
2601@c _i18n_number_rewrite
2602@c __wctrans ok
2603@c __towctrans @mtslocale
2604@c __wcrtomb ok? dup below
2605@c outdigit_value ok
2606@c outdigitwc_value ok
2607@c outchar ok
2608@c outstring ok
2609@c PAD ok
2610@c __printf_fp @mtslocale @ascuheap @acsmem
2611@c __printf_fphex @mtslocale
2612@c __readonly_area
2613@c [GNU/Linux] fopen, strtoul, free
2614@c __strerror_r ok if no translation, check otherwise
2615@c __btowc ? gconv-modules
2616@c __wcrtomb ok (not using internal state) gconv-modules
2617@c ARGCHECK
2618@c UNBUFFERED_P (tested before taking the stream lock)
2619@c buffered_vfprintf ok
2620@c __find_spec(wc|mb)
2621@c read_int
2622@c __libc_use_alloca
2623@c process_arg
2624@c process_string_arg
171e9210
AO
2625@c __parse_one_spec(wc|mb)
2626@c *__printf_arginfo_table unguarded
2627@c __printf_va_arg_table-> unguarded
2628@c *__printf_function_table unguarded
2629@c done_add
2630@c printf_unknown
2631@c outchar
2632@c _itoa_word
28f540f4
RM
2633This is the equivalent of @code{fprintf} with the variable argument list
2634specified directly as for @code{vprintf}.
2635@end deftypefun
2636
b5e73f56 2637@deftypefun int vfwprintf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 2638@standards{ISO, wchar.h}
171e9210 2639@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
2640This is the equivalent of @code{fwprintf} with the variable argument list
2641specified directly as for @code{vwprintf}.
2642@end deftypefun
2643
28f540f4 2644@deftypefun int vsprintf (char *@var{s}, const char *@var{template}, va_list @var{ap})
d08a7e4c 2645@standards{ISO, stdio.h}
171e9210 2646@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2647This is the equivalent of @code{sprintf} with the variable argument list
2648specified directly as for @code{vprintf}.
2649@end deftypefun
2650
c703cd7a 2651@deftypefun int vswprintf (wchar_t *@var{ws}, size_t @var{size}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 2652@standards{GNU, wchar.h}
171e9210 2653@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
2654This is the equivalent of @code{swprintf} with the variable argument list
2655specified directly as for @code{vwprintf}.
2656@end deftypefun
2657
28f540f4 2658@deftypefun int vsnprintf (char *@var{s}, size_t @var{size}, const char *@var{template}, va_list @var{ap})
d08a7e4c 2659@standards{GNU, stdio.h}
171e9210 2660@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2661This is the equivalent of @code{snprintf} with the variable argument list
2662specified directly as for @code{vprintf}.
2663@end deftypefun
2664
28f540f4 2665@deftypefun int vasprintf (char **@var{ptr}, const char *@var{template}, va_list @var{ap})
d08a7e4c 2666@standards{GNU, stdio.h}
171e9210 2667@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
2668The @code{vasprintf} function is the equivalent of @code{asprintf} with the
2669variable argument list specified directly as for @code{vprintf}.
2670@end deftypefun
2671
28f540f4 2672@deftypefun int obstack_vprintf (struct obstack *@var{obstack}, const char *@var{template}, va_list @var{ap})
d08a7e4c 2673@standards{GNU, stdio.h}
171e9210
AO
2674@safety{@prelim{}@mtsafe{@mtsrace{:obstack} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acucorrupt{} @acsmem{}}}
2675@c The obstack is not guarded by mutexes, it might be at an inconsistent
2676@c state within a signal handler, and it could be left at an
2677@c inconsistent state in case of cancellation.
28f540f4
RM
2678The @code{obstack_vprintf} function is the equivalent of
2679@code{obstack_printf} with the variable argument list specified directly
2680as for @code{vprintf}.@refill
2681@end deftypefun
2682
2683Here's an example showing how you might use @code{vfprintf}. This is a
2684function that prints error messages to the stream @code{stderr}, along
2685with a prefix indicating the name of the program
19c3f208 2686(@pxref{Error Messages}, for a description of
28f540f4
RM
2687@code{program_invocation_short_name}).
2688
2689@smallexample
2690@group
2691#include <stdio.h>
2692#include <stdarg.h>
2693
2694void
2695eprintf (const char *template, ...)
2696@{
2697 va_list ap;
2698 extern char *program_invocation_short_name;
2699
2700 fprintf (stderr, "%s: ", program_invocation_short_name);
4b8f94d3 2701 va_start (ap, template);
28f540f4
RM
2702 vfprintf (stderr, template, ap);
2703 va_end (ap);
2704@}
2705@end group
2706@end smallexample
2707
2708@noindent
2709You could call @code{eprintf} like this:
2710
2711@smallexample
2712eprintf ("file `%s' does not exist\n", filename);
2713@end smallexample
2714
2715In GNU C, there is a special construct you can use to let the compiler
2716know that a function uses a @code{printf}-style format string. Then it
2717can check the number and types of arguments in each call to the
2718function, and warn you when they do not match the format string.
2719For example, take this declaration of @code{eprintf}:
2720
2721@smallexample
2722void eprintf (const char *template, ...)
162ba701 2723 __attribute__ ((format (printf, 1, 2)));
28f540f4
RM
2724@end smallexample
2725
2726@noindent
2727This tells the compiler that @code{eprintf} uses a format string like
2728@code{printf} (as opposed to @code{scanf}; @pxref{Formatted Input});
2729the format string appears as the first argument;
2730and the arguments to satisfy the format begin with the second.
2731@xref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 2732gcc, Using GNU CC}, for more information.
28f540f4
RM
2733
2734@node Parsing a Template String
2735@subsection Parsing a Template String
2736@cindex parsing a template string
2737
2738You can use the function @code{parse_printf_format} to obtain
2739information about the number and types of arguments that are expected by
2740a given template string. This function permits interpreters that
2741provide interfaces to @code{printf} to avoid passing along invalid
2742arguments from the user's program, which could cause a crash.
2743
2744All the symbols described in this section are declared in the header
2745file @file{printf.h}.
2746
28f540f4 2747@deftypefun size_t parse_printf_format (const char *@var{template}, size_t @var{n}, int *@var{argtypes})
d08a7e4c 2748@standards{GNU, printf.h}
171e9210 2749@safety{@prelim{}@mtsafe{@mtslocale{}}@assafe{}@acsafe{}}
28f540f4
RM
2750This function returns information about the number and types of
2751arguments expected by the @code{printf} template string @var{template}.
2752The information is stored in the array @var{argtypes}; each element of
2753this array describes one argument. This information is encoded using
2754the various @samp{PA_} macros, listed below.
2755
04b9968b
UD
2756The argument @var{n} specifies the number of elements in the array
2757@var{argtypes}. This is the maximum number of elements that
28f540f4
RM
2758@code{parse_printf_format} will try to write.
2759
2760@code{parse_printf_format} returns the total number of arguments required
2761by @var{template}. If this number is greater than @var{n}, then the
2762information returned describes only the first @var{n} arguments. If you
04b9968b 2763want information about additional arguments, allocate a bigger
28f540f4
RM
2764array and call @code{parse_printf_format} again.
2765@end deftypefun
2766
2767The argument types are encoded as a combination of a basic type and
2768modifier flag bits.
2769
28f540f4 2770@deftypevr Macro int PA_FLAG_MASK
d08a7e4c 2771@standards{GNU, printf.h}
28f540f4
RM
2772This macro is a bitmask for the type modifier flag bits. You can write
2773the expression @code{(argtypes[i] & PA_FLAG_MASK)} to extract just the
2774flag bits for an argument, or @code{(argtypes[i] & ~PA_FLAG_MASK)} to
2775extract just the basic type code.
2776@end deftypevr
2777
2778Here are symbolic constants that represent the basic types; they stand
2779for integer values.
2780
779ae82e 2781@vtable @code
28f540f4 2782@item PA_INT
d08a7e4c 2783@standards{GNU, printf.h}
28f540f4
RM
2784This specifies that the base type is @code{int}.
2785
28f540f4 2786@item PA_CHAR
d08a7e4c 2787@standards{GNU, printf.h}
28f540f4
RM
2788This specifies that the base type is @code{int}, cast to @code{char}.
2789
28f540f4 2790@item PA_STRING
d08a7e4c 2791@standards{GNU, printf.h}
28f540f4
RM
2792This specifies that the base type is @code{char *}, a null-terminated string.
2793
28f540f4 2794@item PA_POINTER
d08a7e4c 2795@standards{GNU, printf.h}
28f540f4
RM
2796This specifies that the base type is @code{void *}, an arbitrary pointer.
2797
28f540f4 2798@item PA_FLOAT
d08a7e4c 2799@standards{GNU, printf.h}
28f540f4
RM
2800This specifies that the base type is @code{float}.
2801
28f540f4 2802@item PA_DOUBLE
d08a7e4c 2803@standards{GNU, printf.h}
28f540f4
RM
2804This specifies that the base type is @code{double}.
2805
28f540f4 2806@item PA_LAST
d08a7e4c 2807@standards{GNU, printf.h}
28f540f4
RM
2808You can define additional base types for your own programs as offsets
2809from @code{PA_LAST}. For example, if you have data types @samp{foo}
2810and @samp{bar} with their own specialized @code{printf} conversions,
2811you could define encodings for these types as:
2812
2813@smallexample
2814#define PA_FOO PA_LAST
2815#define PA_BAR (PA_LAST + 1)
2816@end smallexample
779ae82e 2817@end vtable
28f540f4
RM
2818
2819Here are the flag bits that modify a basic type. They are combined with
2820the code for the basic type using inclusive-or.
2821
779ae82e 2822@vtable @code
28f540f4 2823@item PA_FLAG_PTR
d08a7e4c 2824@standards{GNU, printf.h}
28f540f4
RM
2825If this bit is set, it indicates that the encoded type is a pointer to
2826the base type, rather than an immediate value.
2827For example, @samp{PA_INT|PA_FLAG_PTR} represents the type @samp{int *}.
2828
28f540f4 2829@item PA_FLAG_SHORT
d08a7e4c 2830@standards{GNU, printf.h}
28f540f4
RM
2831If this bit is set, it indicates that the base type is modified with
2832@code{short}. (This corresponds to the @samp{h} type modifier.)
2833
28f540f4 2834@item PA_FLAG_LONG
d08a7e4c 2835@standards{GNU, printf.h}
28f540f4
RM
2836If this bit is set, it indicates that the base type is modified with
2837@code{long}. (This corresponds to the @samp{l} type modifier.)
2838
28f540f4 2839@item PA_FLAG_LONG_LONG
d08a7e4c 2840@standards{GNU, printf.h}
28f540f4
RM
2841If this bit is set, it indicates that the base type is modified with
2842@code{long long}. (This corresponds to the @samp{L} type modifier.)
2843
28f540f4 2844@item PA_FLAG_LONG_DOUBLE
d08a7e4c 2845@standards{GNU, printf.h}
28f540f4
RM
2846This is a synonym for @code{PA_FLAG_LONG_LONG}, used by convention with
2847a base type of @code{PA_DOUBLE} to indicate a type of @code{long double}.
779ae82e 2848@end vtable
28f540f4
RM
2849
2850@ifinfo
6d52618b 2851For an example of using these facilities, see @ref{Example of Parsing}.
28f540f4
RM
2852@end ifinfo
2853
2854@node Example of Parsing
2855@subsection Example of Parsing a Template String
2856
2857Here is an example of decoding argument types for a format string. We
2858assume this is part of an interpreter which contains arguments of type
2859@code{NUMBER}, @code{CHAR}, @code{STRING} and @code{STRUCTURE} (and
2860perhaps others which are not valid here).
2861
2862@smallexample
2863/* @r{Test whether the @var{nargs} specified objects}
2864 @r{in the vector @var{args} are valid}
2865 @r{for the format string @var{format}:}
2866 @r{if so, return 1.}
2867 @r{If not, return 0 after printing an error message.} */
2868
2869int
2870validate_args (char *format, int nargs, OBJECT *args)
2871@{
2872 int *argtypes;
2873 int nwanted;
2874
2875 /* @r{Get the information about the arguments.}
2876 @r{Each conversion specification must be at least two characters}
2877 @r{long, so there cannot be more specifications than half the}
2878 @r{length of the string.} */
2879
2880 argtypes = (int *) alloca (strlen (format) / 2 * sizeof (int));
2881 nwanted = parse_printf_format (string, nelts, argtypes);
2882
2883 /* @r{Check the number of arguments.} */
2884 if (nwanted > nargs)
2885 @{
2886 error ("too few arguments (at least %d required)", nwanted);
2887 return 0;
2888 @}
19c3f208 2889
28f540f4
RM
2890 /* @r{Check the C type wanted for each argument}
2891 @r{and see if the object given is suitable.} */
2892 for (i = 0; i < nwanted; i++)
2893 @{
2894 int wanted;
2895
2896 if (argtypes[i] & PA_FLAG_PTR)
162ba701 2897 wanted = STRUCTURE;
28f540f4 2898 else
162ba701
PIM
2899 switch (argtypes[i] & ~PA_FLAG_MASK)
2900 @{
2901 case PA_INT:
2902 case PA_FLOAT:
2903 case PA_DOUBLE:
2904 wanted = NUMBER;
2905 break;
2906 case PA_CHAR:
2907 wanted = CHAR;
2908 break;
2909 case PA_STRING:
2910 wanted = STRING;
2911 break;
2912 case PA_POINTER:
2913 wanted = STRUCTURE;
2914 break;
2915 @}
28f540f4 2916 if (TYPE (args[i]) != wanted)
162ba701
PIM
2917 @{
2918 error ("type mismatch for arg number %d", i);
2919 return 0;
2920 @}
28f540f4
RM
2921 @}
2922 return 1;
2923@}
2924@end smallexample
2925
2926@node Customizing Printf
2927@section Customizing @code{printf}
2928@cindex customizing @code{printf}
2929@cindex defining new @code{printf} conversions
2930@cindex extending @code{printf}
2931
1f77f049 2932@Theglibc{} lets you define your own custom conversion specifiers
28f540f4
RM
2933for @code{printf} template strings, to teach @code{printf} clever ways
2934to print the important data structures of your program.
2935
2936The way you do this is by registering the conversion with the function
2937@code{register_printf_function}; see @ref{Registering New Conversions}.
2938One of the arguments you pass to this function is a pointer to a handler
2939function that produces the actual output; see @ref{Defining the Output
2940Handler}, for information on how to write this function.
2941
2942You can also install a function that just returns information about the
2943number and type of arguments expected by the conversion specifier.
2944@xref{Parsing a Template String}, for information about this.
2945
2946The facilities of this section are declared in the header file
2947@file{printf.h}.
2948
2949@menu
19c3f208 2950* Registering New Conversions:: Using @code{register_printf_function}
162ba701 2951 to register a new output conversion.
28f540f4 2952* Conversion Specifier Options:: The handler must be able to get
162ba701
PIM
2953 the options specified in the
2954 template when it is called.
28f540f4 2955* Defining the Output Handler:: Defining the handler and arginfo
162ba701
PIM
2956 functions that are passed as arguments
2957 to @code{register_printf_function}.
28f540f4 2958* Printf Extension Example:: How to define a @code{printf}
162ba701 2959 handler function.
29bb8719 2960* Predefined Printf Handlers:: Predefined @code{printf} handlers.
28f540f4
RM
2961@end menu
2962
2963@strong{Portability Note:} The ability to extend the syntax of
f65fd747 2964@code{printf} template strings is a GNU extension. ISO standard C has
28f540f4
RM
2965nothing similar.
2966
2967@node Registering New Conversions
2968@subsection Registering New Conversions
2969
2970The function to register a new output conversion is
2971@code{register_printf_function}, declared in @file{printf.h}.
2972@pindex printf.h
2973
28f540f4 2974@deftypefun int register_printf_function (int @var{spec}, printf_function @var{handler-function}, printf_arginfo_function @var{arginfo-function})
d08a7e4c 2975@standards{GNU, printf.h}
171e9210
AO
2976@safety{@prelim{}@mtunsafe{@mtasuconst{:printfext}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
2977@c This function is guarded by the global non-recursive libc lock, but
2978@c users of the variables it sets aren't, and those should be MT-Safe,
2979@c so we're ruling out the use of this extension with threads. Calling
2980@c it from a signal handler may self-deadlock, and cancellation may
2981@c leave the lock held, besides leaking allocated memory.
28f540f4 2982This function defines the conversion specifier character @var{spec}.
42be70d4 2983Thus, if @var{spec} is @code{'Y'}, it defines the conversion @samp{%Y}.
28f540f4
RM
2984You can redefine the built-in conversions like @samp{%s}, but flag
2985characters like @samp{#} and type modifiers like @samp{l} can never be
2986used as conversions; calling @code{register_printf_function} for those
42be70d4
UD
2987characters has no effect. It is advisable not to use lowercase letters,
2988since the ISO C standard warns that additional lowercase letters may be
2989standardized in future editions of the standard.
28f540f4
RM
2990
2991The @var{handler-function} is the function called by @code{printf} and
2992friends when this conversion appears in a template string.
2993@xref{Defining the Output Handler}, for information about how to define
2994a function to pass as this argument. If you specify a null pointer, any
2995existing handler function for @var{spec} is removed.
2996
2997The @var{arginfo-function} is the function called by
2998@code{parse_printf_format} when this conversion appears in a
2999template string. @xref{Parsing a Template String}, for information
3000about this.
3001
54d79e99
UD
3002@c The following is not true anymore. The `parse_printf_format' function
3003@c is now also called from `vfprintf' via `parse_one_spec'.
3004@c --drepper@gnu, 1996/11/14
3005@c
3006@c Normally, you install both functions for a conversion at the same time,
3007@c but if you are never going to call @code{parse_printf_format}, you do
3008@c not need to define an arginfo function.
3009
1f77f049 3010@strong{Attention:} In @theglibc{} versions before 2.0 the
54d79e99 3011@var{arginfo-function} function did not need to be installed unless
04b9968b 3012the user used the @code{parse_printf_format} function. This has changed.
54d79e99
UD
3013Now a call to any of the @code{printf} functions will call this
3014function when this format specifier appears in the format string.
28f540f4
RM
3015
3016The return value is @code{0} on success, and @code{-1} on failure
3017(which occurs if @var{spec} is out of range).
3018
3019You can redefine the standard output conversions, but this is probably
3020not a good idea because of the potential for confusion. Library routines
3021written by other people could break if you do this.
3022@end deftypefun
3023
3024@node Conversion Specifier Options
3025@subsection Conversion Specifier Options
3026
40deae08
RM
3027If you define a meaning for @samp{%A}, what if the template contains
3028@samp{%+23A} or @samp{%-#A}? To implement a sensible meaning for these,
28f540f4
RM
3029the handler when called needs to be able to get the options specified in
3030the template.
3031
838e5ffe
UD
3032Both the @var{handler-function} and @var{arginfo-function} accept an
3033argument that points to a @code{struct printf_info}, which contains
3034information about the options appearing in an instance of the conversion
3035specifier. This data type is declared in the header file
3036@file{printf.h}.
28f540f4
RM
3037@pindex printf.h
3038
28f540f4 3039@deftp {Type} {struct printf_info}
d08a7e4c 3040@standards{GNU, printf.h}
28f540f4
RM
3041This structure is used to pass information about the options appearing
3042in an instance of a conversion specifier in a @code{printf} template
3043string to the handler and arginfo functions for that specifier. It
3044contains the following members:
3045
3046@table @code
3047@item int prec
3048This is the precision specified. The value is @code{-1} if no precision
3049was specified. If the precision was given as @samp{*}, the
3050@code{printf_info} structure passed to the handler function contains the
3051actual value retrieved from the argument list. But the structure passed
3052to the arginfo function contains a value of @code{INT_MIN}, since the
3053actual value is not known.
3054
3055@item int width
3056This is the minimum field width specified. The value is @code{0} if no
3057width was specified. If the field width was given as @samp{*}, the
3058@code{printf_info} structure passed to the handler function contains the
3059actual value retrieved from the argument list. But the structure passed
3060to the arginfo function contains a value of @code{INT_MIN}, since the
3061actual value is not known.
3062
54d79e99 3063@item wchar_t spec
28f540f4
RM
3064This is the conversion specifier character specified. It's stored in
3065the structure so that you can register the same handler function for
3066multiple characters, but still have a way to tell them apart when the
3067handler function is called.
3068
3069@item unsigned int is_long_double
3070This is a boolean that is true if the @samp{L}, @samp{ll}, or @samp{q}
3071type modifier was specified. For integer conversions, this indicates
3072@code{long long int}, as opposed to @code{long double} for floating
3073point conversions.
3074
d64b6ad0
UD
3075@item unsigned int is_char
3076This is a boolean that is true if the @samp{hh} type modifier was specified.
3077
28f540f4
RM
3078@item unsigned int is_short
3079This is a boolean that is true if the @samp{h} type modifier was specified.
3080
3081@item unsigned int is_long
3082This is a boolean that is true if the @samp{l} type modifier was specified.
3083
3084@item unsigned int alt
3085This is a boolean that is true if the @samp{#} flag was specified.
3086
3087@item unsigned int space
3088This is a boolean that is true if the @samp{ } flag was specified.
3089
3090@item unsigned int left
3091This is a boolean that is true if the @samp{-} flag was specified.
3092
3093@item unsigned int showsign
3094This is a boolean that is true if the @samp{+} flag was specified.
3095
3096@item unsigned int group
3097This is a boolean that is true if the @samp{'} flag was specified.
3098
54d79e99
UD
3099@item unsigned int extra
3100This flag has a special meaning depending on the context. It could
3101be used freely by the user-defined handlers but when called from
3102the @code{printf} function this variable always contains the value
3103@code{0}.
3104
d64b6ad0
UD
3105@item unsigned int wide
3106This flag is set if the stream is wide oriented.
3107
54d79e99 3108@item wchar_t pad
28f540f4
RM
3109This is the character to use for padding the output to the minimum field
3110width. The value is @code{'0'} if the @samp{0} flag was specified, and
3111@code{' '} otherwise.
3112@end table
3113@end deftp
3114
3115
3116@node Defining the Output Handler
3117@subsection Defining the Output Handler
3118
3119Now let's look at how to define the handler and arginfo functions
3120which are passed as arguments to @code{register_printf_function}.
3121
1f77f049 3122@strong{Compatibility Note:} The interface changed in @theglibc{}
54d79e99
UD
3123version 2.0. Previously the third argument was of type
3124@code{va_list *}.
3125
28f540f4
RM
3126You should define your handler functions with a prototype like:
3127
3128@smallexample
3129int @var{function} (FILE *stream, const struct printf_info *info,
162ba701 3130 const void *const *args)
28f540f4
RM
3131@end smallexample
3132
54d79e99 3133The @var{stream} argument passed to the handler function is the stream to
28f540f4
RM
3134which it should write output.
3135
54d79e99 3136The @var{info} argument is a pointer to a structure that contains
28f540f4
RM
3137information about the various options that were included with the
3138conversion in the template string. You should not modify this structure
3139inside your handler function. @xref{Conversion Specifier Options}, for
3140a description of this data structure.
3141
54d79e99
UD
3142@c The following changes some time back. --drepper@gnu, 1996/11/14
3143@c
3144@c The @code{ap_pointer} argument is used to pass the tail of the variable
3145@c argument list containing the values to be printed to your handler.
3146@c Unlike most other functions that can be passed an explicit variable
3147@c argument list, this is a @emph{pointer} to a @code{va_list}, rather than
3148@c the @code{va_list} itself. Thus, you should fetch arguments by
3149@c means of @code{va_arg (*ap_pointer, @var{type})}.
3150@c
3151@c (Passing a pointer here allows the function that calls your handler
3152@c function to update its own @code{va_list} variable to account for the
3153@c arguments that your handler processes. @xref{Variadic Functions}.)
3154
3155The @var{args} is a vector of pointers to the arguments data.
04b9968b 3156The number of arguments was determined by calling the argument
54d79e99 3157information function provided by the user.
28f540f4
RM
3158
3159Your handler function should return a value just like @code{printf}
3160does: it should return the number of characters it has written, or a
3161negative value to indicate an error.
3162
28f540f4 3163@deftp {Data Type} printf_function
d08a7e4c 3164@standards{GNU, printf.h}
28f540f4
RM
3165This is the data type that a handler function should have.
3166@end deftp
3167
3168If you are going to use @w{@code{parse_printf_format}} in your
54d79e99 3169application, you must also define a function to pass as the
28f540f4 3170@var{arginfo-function} argument for each new conversion you install with
19c3f208 3171@code{register_printf_function}.
28f540f4 3172
54d79e99 3173You have to define these functions with a prototype like:
28f540f4
RM
3174
3175@smallexample
3176int @var{function} (const struct printf_info *info,
162ba701 3177 size_t n, int *argtypes)
28f540f4
RM
3178@end smallexample
3179
3180The return value from the function should be the number of arguments the
3181conversion expects. The function should also fill in no more than
3182@var{n} elements of the @var{argtypes} array with information about the
3183types of each of these arguments. This information is encoded using the
3184various @samp{PA_} macros. (You will notice that this is the same
3185calling convention @code{parse_printf_format} itself uses.)
3186
28f540f4 3187@deftp {Data Type} printf_arginfo_function
d08a7e4c 3188@standards{GNU, printf.h}
28f540f4
RM
3189This type is used to describe functions that return information about
3190the number and type of arguments used by a conversion specifier.
3191@end deftp
3192
3193@node Printf Extension Example
3194@subsection @code{printf} Extension Example
3195
3196Here is an example showing how to define a @code{printf} handler function.
19c3f208 3197This program defines a data structure called a @code{Widget} and
28f540f4
RM
3198defines the @samp{%W} conversion to print information about @w{@code{Widget *}}
3199arguments, including the pointer value and the name stored in the data
3200structure. The @samp{%W} conversion supports the minimum field width and
3201left-justification options, but ignores everything else.
3202
3203@smallexample
3204@include rprintf.c.texi
3205@end smallexample
3206
3207The output produced by this program looks like:
3208
3209@smallexample
3210|<Widget 0xffeffb7c: mywidget>|
3211| <Widget 0xffeffb7c: mywidget>|
3212|<Widget 0xffeffb7c: mywidget> |
3213@end smallexample
3214
29bb8719
UD
3215@node Predefined Printf Handlers
3216@subsection Predefined @code{printf} Handlers
3217
1f77f049 3218@Theglibc{} also contains a concrete and useful application of the
29bb8719
UD
3219@code{printf} handler extension. There are two functions available
3220which implement a special way to print floating-point numbers.
3221
29bb8719 3222@deftypefun int printf_size (FILE *@var{fp}, const struct printf_info *@var{info}, const void *const *@var{args})
d08a7e4c 3223@standards{GNU, printf.h}
171e9210
AO
3224@safety{@prelim{}@mtsafe{@mtsrace{:fp} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @acucorrupt{}}}
3225@c This is meant to be called by vfprintf, that should hold the lock on
3226@c the stream, but if this function is called directly, output will be
3227@c racy, besides the uses of the global locale object while other
3228@c threads may be changing it and the possbility of leaving the stream
3229@c object in an inconsistent state in case of cancellation.
29bb8719
UD
3230Print a given floating point number as for the format @code{%f} except
3231that there is a postfix character indicating the divisor for the
3232number to make this less than 1000. There are two possible divisors:
04b9968b 3233powers of 1024 or powers of 1000. Which one is used depends on the
29bb8719
UD
3234format character specified while registered this handler. If the
3235character is of lower case, 1024 is used. For upper case characters,
32361000 is used.
3237
3238The postfix tag corresponds to bytes, kilobytes, megabytes, gigabytes,
3239etc. The full table is:
3240
779ae82e 3241@ifinfo
029264d1 3242@multitable {' '} {2^10 (1024)} {zetta} {Upper} {10^24 (1000)}
29bb8719
UD
3243@item low @tab Multiplier @tab From @tab Upper @tab Multiplier
3244@item ' ' @tab 1 @tab @tab ' ' @tab 1
3245@item k @tab 2^10 (1024) @tab kilo @tab K @tab 10^3 (1000)
3246@item m @tab 2^20 @tab mega @tab M @tab 10^6
3247@item g @tab 2^30 @tab giga @tab G @tab 10^9
3248@item t @tab 2^40 @tab tera @tab T @tab 10^12
3249@item p @tab 2^50 @tab peta @tab P @tab 10^15
3250@item e @tab 2^60 @tab exa @tab E @tab 10^18
3251@item z @tab 2^70 @tab zetta @tab Z @tab 10^21
3252@item y @tab 2^80 @tab yotta @tab Y @tab 10^24
3253@end multitable
779ae82e
UD
3254@end ifinfo
3255@iftex
3256@tex
3257\hbox to\hsize{\hfil\vbox{\offinterlineskip
3258\hrule
3259\halign{\strut#& \vrule#\tabskip=1em plus2em& {\tt#}\hfil& \vrule#& #\hfil& \vrule#& #\hfil& \vrule#& {\tt#}\hfil& \vrule#& #\hfil& \vrule#\tabskip=0pt\cr
3260\noalign{\hrule}
3261\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
3262&& \omit low && Multiplier && From && \omit Upper && Multiplier &\cr
3263\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
3264\noalign{\hrule}
3265&& {\tt\char32} && 1 && && {\tt\char32} && 1 &\cr
3266&& k && $2^{10} = 1024$ && kilo && K && $10^3 = 1000$ &\cr
3267&& m && $2^{20}$ && mega && M && $10^6$ &\cr
3268&& g && $2^{30}$ && giga && G && $10^9$ &\cr
3269&& t && $2^{40}$ && tera && T && $10^{12}$ &\cr
3270&& p && $2^{50}$ && peta && P && $10^{15}$ &\cr
3271&& e && $2^{60}$ && exa && E && $10^{18}$ &\cr
3272&& z && $2^{70}$ && zetta && Z && $10^{21}$ &\cr
3273&& y && $2^{80}$ && yotta && Y && $10^{24}$ &\cr
3274\noalign{\hrule}}}\hfil}
3275@end tex
3276@end iftex
29bb8719
UD
3277
3278The default precision is 3, i.e., 1024 is printed with a lower-case
3279format character as if it were @code{%.3fk} and will yield @code{1.000k}.
3280@end deftypefun
3281
3282Due to the requirements of @code{register_printf_function} we must also
04b9968b 3283provide the function which returns information about the arguments.
29bb8719 3284
29bb8719 3285@deftypefun int printf_size_info (const struct printf_info *@var{info}, size_t @var{n}, int *@var{argtypes})
d08a7e4c 3286@standards{GNU, printf.h}
171e9210 3287@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
29bb8719
UD
3288This function will return in @var{argtypes} the information about the
3289used parameters in the way the @code{vfprintf} implementation expects
3290it. The format always takes one argument.
3291@end deftypefun
3292
3293To use these functions both functions must be registered with a call like
3294
3295@smallexample
3296register_printf_function ('B', printf_size, printf_size_info);
3297@end smallexample
3298
3299Here we register the functions to print numbers as powers of 1000 since
f2ea0f5b 3300the format character @code{'B'} is an upper-case character. If we
29bb8719
UD
3301would additionally use @code{'b'} in a line like
3302
3303@smallexample
3304register_printf_function ('b', printf_size, printf_size_info);
3305@end smallexample
3306
3307@noindent
04b9968b
UD
3308we could also print using a power of 1024. Please note that all that is
3309different in these two lines is the format specifier. The
3310@code{printf_size} function knows about the difference between lower and upper
29bb8719
UD
3311case format specifiers.
3312
3313The use of @code{'B'} and @code{'b'} is no coincidence. Rather it is
3314the preferred way to use this functionality since it is available on
04b9968b 3315some other systems which also use format specifiers.
29bb8719 3316
28f540f4
RM
3317@node Formatted Input
3318@section Formatted Input
3319
3320@cindex formatted input from a stream
3321@cindex reading from a stream, formatted
3322@cindex format string, for @code{scanf}
3323@cindex template, for @code{scanf}
3324The functions described in this section (@code{scanf} and related
3325functions) provide facilities for formatted input analogous to the
3326formatted output facilities. These functions provide a mechanism for
3327reading arbitrary values under the control of a @dfn{format string} or
3328@dfn{template string}.
3329
3330@menu
3331* Formatted Input Basics:: Some basics to get you started.
3332* Input Conversion Syntax:: Syntax of conversion specifications.
3333* Table of Input Conversions:: Summary of input conversions and what they do.
3334* Numeric Input Conversions:: Details of conversions for reading numbers.
3335* String Input Conversions:: Details of conversions for reading strings.
3336* Dynamic String Input:: String conversions that @code{malloc} the buffer.
3337* Other Input Conversions:: Details of miscellaneous other conversions.
3338* Formatted Input Functions:: Descriptions of the actual functions.
3339* Variable Arguments Input:: @code{vscanf} and friends.
3340@end menu
3341
3342@node Formatted Input Basics
3343@subsection Formatted Input Basics
3344
3345Calls to @code{scanf} are superficially similar to calls to
3346@code{printf} in that arbitrary arguments are read under the control of
3347a template string. While the syntax of the conversion specifications in
3348the template is very similar to that for @code{printf}, the
3349interpretation of the template is oriented more towards free-format
3350input and simple pattern matching, rather than fixed-field formatting.
3351For example, most @code{scanf} conversions skip over any amount of
3352``white space'' (including spaces, tabs, and newlines) in the input
3353file, and there is no concept of precision for the numeric input
3354conversions as there is for the corresponding output conversions.
3355Ordinarily, non-whitespace characters in the template are expected to
3356match characters in the input stream exactly, but a matching failure is
3357distinct from an input error on the stream.
3358@cindex conversion specifications (@code{scanf})
3359
3360Another area of difference between @code{scanf} and @code{printf} is
3361that you must remember to supply pointers rather than immediate values
3362as the optional arguments to @code{scanf}; the values that are read are
3363stored in the objects that the pointers point to. Even experienced
3364programmers tend to forget this occasionally, so if your program is
3365getting strange errors that seem to be related to @code{scanf}, you
3366might want to double-check this.
3367
3368When a @dfn{matching failure} occurs, @code{scanf} returns immediately,
3369leaving the first non-matching character as the next character to be
3370read from the stream. The normal return value from @code{scanf} is the
3371number of values that were assigned, so you can use this to determine if
3372a matching error happened before all the expected values were read.
3373@cindex matching failure, in @code{scanf}
3374
3375The @code{scanf} function is typically used for things like reading in
3376the contents of tables. For example, here is a function that uses
3377@code{scanf} to initialize an array of @code{double}:
3378
3379@smallexample
3380void
3381readarray (double *array, int n)
3382@{
3383 int i;
3384 for (i=0; i<n; i++)
3385 if (scanf (" %lf", &(array[i])) != 1)
3386 invalid_input_error ();
3387@}
3388@end smallexample
3389
3390The formatted input functions are not used as frequently as the
3391formatted output functions. Partly, this is because it takes some care
3392to use them properly. Another reason is that it is difficult to recover
3393from a matching error.
3394
3395If you are trying to read input that doesn't match a single, fixed
3396pattern, you may be better off using a tool such as Flex to generate a
3397lexical scanner, or Bison to generate a parser, rather than using
9f508673
UD
3398@code{scanf}. For more information about these tools, see @ref{Top, , ,
3399flex.info, Flex: The Lexical Scanner Generator}, and @ref{Top, , ,
28f540f4
RM
3400bison.info, The Bison Reference Manual}.
3401
3402@node Input Conversion Syntax
3403@subsection Input Conversion Syntax
3404
3405A @code{scanf} template string is a string that contains ordinary
3406multibyte characters interspersed with conversion specifications that
3407start with @samp{%}.
3408
3409Any whitespace character (as defined by the @code{isspace} function;
3410@pxref{Classification of Characters}) in the template causes any number
3411of whitespace characters in the input stream to be read and discarded.
3412The whitespace characters that are matched need not be exactly the same
3413whitespace characters that appear in the template string. For example,
3414write @samp{ , } in the template to recognize a comma with optional
3415whitespace before and after.
3416
3417Other characters in the template string that are not part of conversion
3418specifications must match characters in the input stream exactly; if
3419this is not the case, a matching failure occurs.
3420
3421The conversion specifications in a @code{scanf} template string
3422have the general form:
3423
3424@smallexample
3425% @var{flags} @var{width} @var{type} @var{conversion}
3426@end smallexample
3427
3428In more detail, an input conversion specification consists of an initial
3429@samp{%} character followed in sequence by:
3430
3431@itemize @bullet
3432@item
3433An optional @dfn{flag character} @samp{*}, which says to ignore the text
3434read for this specification. When @code{scanf} finds a conversion
3435specification that uses this flag, it reads input as directed by the
3436rest of the conversion specification, but it discards this input, does
3437not use a pointer argument, and does not increment the count of
3438successful assignments.
3439@cindex flag character (@code{scanf})
3440
3441@item
3442An optional flag character @samp{a} (valid with string conversions only)
3443which requests allocation of a buffer long enough to store the string in.
3444(This is a GNU extension.)
3445@xref{Dynamic String Input}.
3446
3447@item
3448An optional decimal integer that specifies the @dfn{maximum field
3449width}. Reading of characters from the input stream stops either when
3450this maximum is reached or when a non-matching character is found,
3451whichever happens first. Most conversions discard initial whitespace
3452characters (those that don't are explicitly documented), and these
3453discarded characters don't count towards the maximum field width.
3454String input conversions store a null character to mark the end of the
3455input; the maximum field width does not include this terminator.
3456@cindex maximum field width (@code{scanf})
3457
3458@item
3459An optional @dfn{type modifier character}. For example, you can
3460specify a type modifier of @samp{l} with integer conversions such as
3461@samp{%d} to specify that the argument is a pointer to a @code{long int}
3462rather than a pointer to an @code{int}.
3463@cindex type modifier character (@code{scanf})
3464
3465@item
3466A character that specifies the conversion to be applied.
3467@end itemize
3468
19c3f208 3469The exact options that are permitted and how they are interpreted vary
28f540f4
RM
3470between the different conversion specifiers. See the descriptions of the
3471individual conversions for information about the particular options that
3472they allow.
3473
3474With the @samp{-Wformat} option, the GNU C compiler checks calls to
3475@code{scanf} and related functions. It examines the format string and
3476verifies that the correct number and types of arguments are supplied.
3477There is also a GNU C syntax to tell the compiler that a function you
19c3f208 3478write uses a @code{scanf}-style format string.
28f540f4 3479@xref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 3480gcc, Using GNU CC}, for more information.
28f540f4
RM
3481
3482@node Table of Input Conversions
3483@subsection Table of Input Conversions
3484@cindex input conversions, for @code{scanf}
3485
3486Here is a table that summarizes the various conversion specifications:
3487
3488@table @asis
3489@item @samp{%d}
3490Matches an optionally signed integer written in decimal. @xref{Numeric
3491Input Conversions}.
3492
3493@item @samp{%i}
3494Matches an optionally signed integer in any of the formats that the C
3495language defines for specifying an integer constant. @xref{Numeric
3496Input Conversions}.
3497
3498@item @samp{%o}
3499Matches an unsigned integer written in octal radix.
3500@xref{Numeric Input Conversions}.
3501
3502@item @samp{%u}
3503Matches an unsigned integer written in decimal radix.
3504@xref{Numeric Input Conversions}.
3505
3506@item @samp{%x}, @samp{%X}
3507Matches an unsigned integer written in hexadecimal radix.
3508@xref{Numeric Input Conversions}.
3509
3510@item @samp{%e}, @samp{%f}, @samp{%g}, @samp{%E}, @samp{%G}
3511Matches an optionally signed floating-point number. @xref{Numeric Input
3512Conversions}.
3513
3514@item @samp{%s}
b5e73f56 3515
28f540f4 3516Matches a string containing only non-whitespace characters.
b5e73f56
UD
3517@xref{String Input Conversions}. The presence of the @samp{l} modifier
3518determines whether the output is stored as a wide character string or a
3519multibyte string. If @samp{%s} is used in a wide character function the
3520string is converted as with multiple calls to @code{wcrtomb} into a
3521multibyte string. This means that the buffer must provide room for
3522@code{MB_CUR_MAX} bytes for each wide character read. In case
3523@samp{%ls} is used in a multibyte function the result is converted into
3524wide characters as with multiple calls of @code{mbrtowc} before being
3525stored in the user provided buffer.
3526
3527@item @samp{%S}
3528This is an alias for @samp{%ls} which is supported for compatibility
3529with the Unix standard.
28f540f4
RM
3530
3531@item @samp{%[}
3532Matches a string of characters that belong to a specified set.
b5e73f56
UD
3533@xref{String Input Conversions}. The presence of the @samp{l} modifier
3534determines whether the output is stored as a wide character string or a
3535multibyte string. If @samp{%[} is used in a wide character function the
3536string is converted as with multiple calls to @code{wcrtomb} into a
3537multibyte string. This means that the buffer must provide room for
3538@code{MB_CUR_MAX} bytes for each wide character read. In case
3539@samp{%l[} is used in a multibyte function the result is converted into
3540wide characters as with multiple calls of @code{mbrtowc} before being
3541stored in the user provided buffer.
28f540f4
RM
3542
3543@item @samp{%c}
3544Matches a string of one or more characters; the number of characters
3545read is controlled by the maximum field width given for the conversion.
3546@xref{String Input Conversions}.
3547
c703cd7a 3548If @samp{%c} is used in a wide stream function the read value is
b5e73f56
UD
3549converted from a wide character to the corresponding multibyte character
3550before storing it. Note that this conversion can produce more than one
c703cd7a 3551byte of output and therefore the provided buffer must be large enough for up
b5e73f56
UD
3552to @code{MB_CUR_MAX} bytes for each character. If @samp{%lc} is used in
3553a multibyte function the input is treated as a multibyte sequence (and
3554not bytes) and the result is converted as with calls to @code{mbrtowc}.
3555
3556@item @samp{%C}
3557This is an alias for @samp{%lc} which is supported for compatibility
3558with the Unix standard.
3559
28f540f4
RM
3560@item @samp{%p}
3561Matches a pointer value in the same implementation-defined format used
3562by the @samp{%p} output conversion for @code{printf}. @xref{Other Input
3563Conversions}.
3564
3565@item @samp{%n}
3566This conversion doesn't read any characters; it records the number of
3567characters read so far by this call. @xref{Other Input Conversions}.
3568
3569@item @samp{%%}
3570This matches a literal @samp{%} character in the input stream. No
3571corresponding argument is used. @xref{Other Input Conversions}.
3572@end table
3573
3574If the syntax of a conversion specification is invalid, the behavior is
3575undefined. If there aren't enough function arguments provided to supply
3576addresses for all the conversion specifications in the template strings
3577that perform assignments, or if the arguments are not of the correct
3578types, the behavior is also undefined. On the other hand, extra
3579arguments are simply ignored.
3580
3581@node Numeric Input Conversions
3582@subsection Numeric Input Conversions
3583
3584This section describes the @code{scanf} conversions for reading numeric
3585values.
3586
3587The @samp{%d} conversion matches an optionally signed integer in decimal
3588radix. The syntax that is recognized is the same as that for the
3589@code{strtol} function (@pxref{Parsing of Integers}) with the value
3590@code{10} for the @var{base} argument.
3591
3592The @samp{%i} conversion matches an optionally signed integer in any of
3593the formats that the C language defines for specifying an integer
3594constant. The syntax that is recognized is the same as that for the
3595@code{strtol} function (@pxref{Parsing of Integers}) with the value
3596@code{0} for the @var{base} argument. (You can print integers in this
3597syntax with @code{printf} by using the @samp{#} flag character with the
3598@samp{%x}, @samp{%o}, or @samp{%d} conversion. @xref{Integer Conversions}.)
3599
3600For example, any of the strings @samp{10}, @samp{0xa}, or @samp{012}
3601could be read in as integers under the @samp{%i} conversion. Each of
3602these specifies a number with decimal value @code{10}.
3603
3604The @samp{%o}, @samp{%u}, and @samp{%x} conversions match unsigned
3605integers in octal, decimal, and hexadecimal radices, respectively. The
3606syntax that is recognized is the same as that for the @code{strtoul}
3607function (@pxref{Parsing of Integers}) with the appropriate value
3608(@code{8}, @code{10}, or @code{16}) for the @var{base} argument.
3609
3610The @samp{%X} conversion is identical to the @samp{%x} conversion. They
3611both permit either uppercase or lowercase letters to be used as digits.
3612
3613The default type of the corresponding argument for the @code{%d} and
3614@code{%i} conversions is @code{int *}, and @code{unsigned int *} for the
3615other integer conversions. You can use the following type modifiers to
3616specify other sizes of integer:
3617
3618@table @samp
cc3fa755
UD
3619@item hh
3620Specifies that the argument is a @code{signed char *} or @code{unsigned
3621char *}.
3622
ec751a23 3623This modifier was introduced in @w{ISO C99}.
e852e889 3624
28f540f4
RM
3625@item h
3626Specifies that the argument is a @code{short int *} or @code{unsigned
3627short int *}.
3628
e852e889
UD
3629@item j
3630Specifies that the argument is a @code{intmax_t *} or @code{uintmax_t *}.
3631
ec751a23 3632This modifier was introduced in @w{ISO C99}.
e852e889 3633
28f540f4
RM
3634@item l
3635Specifies that the argument is a @code{long int *} or @code{unsigned
3636long int *}. Two @samp{l} characters is like the @samp{L} modifier, below.
3637
b5e73f56
UD
3638If used with @samp{%c} or @samp{%s} the corresponding parameter is
3639considered as a pointer to a wide character or wide character string
3640respectively. This use of @samp{l} was introduced in @w{Amendment 1} to
3641@w{ISO C90}.
3642
28f540f4
RM
3643@need 100
3644@item ll
3645@itemx L
3646@itemx q
3647Specifies that the argument is a @code{long long int *} or @code{unsigned long long int *}. (The @code{long long} type is an extension supported by the
3648GNU C compiler. For systems that don't provide extra-long integers, this
3649is the same as @code{long int}.)
3650
3651The @samp{q} modifier is another name for the same thing, which comes
3652from 4.4 BSD; a @w{@code{long long int}} is sometimes called a ``quad''
3653@code{int}.
e852e889
UD
3654
3655@item t
3656Specifies that the argument is a @code{ptrdiff_t *}.
3657
ec751a23 3658This modifier was introduced in @w{ISO C99}.
e852e889
UD
3659
3660@item z
3661Specifies that the argument is a @code{size_t *}.
3662
ec751a23 3663This modifier was introduced in @w{ISO C99}.
28f540f4
RM
3664@end table
3665
3666All of the @samp{%e}, @samp{%f}, @samp{%g}, @samp{%E}, and @samp{%G}
3667input conversions are interchangeable. They all match an optionally
3668signed floating point number, in the same syntax as for the
3669@code{strtod} function (@pxref{Parsing of Floats}).
3670
3671For the floating-point input conversions, the default argument type is
3672@code{float *}. (This is different from the corresponding output
3673conversions, where the default type is @code{double}; remember that
3674@code{float} arguments to @code{printf} are converted to @code{double}
3675by the default argument promotions, but @code{float *} arguments are
3676not promoted to @code{double *}.) You can specify other sizes of float
3677using these type modifiers:
3678
3679@table @samp
3680@item l
3681Specifies that the argument is of type @code{double *}.
3682
3683@item L
3684Specifies that the argument is of type @code{long double *}.
3685@end table
3686
2c6fe0bd
UD
3687For all the above number parsing formats there is an additional optional
3688flag @samp{'}. When this flag is given the @code{scanf} function
3689expects the number represented in the input string to be formatted
3690according to the grouping rules of the currently selected locale
3691(@pxref{General Numeric}).
3692
3693If the @code{"C"} or @code{"POSIX"} locale is selected there is no
3694difference. But for a locale which specifies values for the appropriate
3695fields in the locale the input must have the correct form in the input.
3696Otherwise the longest prefix with a correct form is processed.
3697
28f540f4
RM
3698@node String Input Conversions
3699@subsection String Input Conversions
3700
3701This section describes the @code{scanf} input conversions for reading
b5e73f56
UD
3702string and character values: @samp{%s}, @samp{%S}, @samp{%[}, @samp{%c},
3703and @samp{%C}.
28f540f4
RM
3704
3705You have two options for how to receive the input from these
3706conversions:
3707
3708@itemize @bullet
3709@item
b5e73f56
UD
3710Provide a buffer to store it in. This is the default. You should
3711provide an argument of type @code{char *} or @code{wchar_t *} (the
c703cd7a 3712latter if the @samp{l} modifier is present).
28f540f4
RM
3713
3714@strong{Warning:} To make a robust program, you must make sure that the
3715input (plus its terminating null) cannot possibly exceed the size of the
3716buffer you provide. In general, the only way to do this is to specify a
3717maximum field width one less than the buffer size. @strong{If you
3718provide the buffer, always specify a maximum field width to prevent
3719overflow.}
3720
3721@item
3722Ask @code{scanf} to allocate a big enough buffer, by specifying the
3723@samp{a} flag character. This is a GNU extension. You should provide
3724an argument of type @code{char **} for the buffer address to be stored
3725in. @xref{Dynamic String Input}.
3726@end itemize
3727
3728The @samp{%c} conversion is the simplest: it matches a fixed number of
04b9968b 3729characters, always. The maximum field width says how many characters to
28f540f4
RM
3730read; if you don't specify the maximum, the default is 1. This
3731conversion doesn't append a null character to the end of the text it
3732reads. It also does not skip over initial whitespace characters. It
3733reads precisely the next @var{n} characters, and fails if it cannot get
3734that many. Since there is always a maximum field width with @samp{%c}
3735(whether specified, or 1 by default), you can always prevent overflow by
3736making the buffer long enough.
b5e73f56
UD
3737@comment Is character == byte here??? --drepper
3738
3739If the format is @samp{%lc} or @samp{%C} the function stores wide
3740characters which are converted using the conversion determined at the
3741time the stream was opened from the external byte stream. The number of
3742bytes read from the medium is limited by @code{MB_CUR_LEN * @var{n}} but
c703cd7a 3743at most @var{n} wide characters get stored in the output string.
28f540f4
RM
3744
3745The @samp{%s} conversion matches a string of non-whitespace characters.
3746It skips and discards initial whitespace, but stops when it encounters
3747more whitespace after having read something. It stores a null character
3748at the end of the text that it reads.
3749
3750For example, reading the input:
3751
3752@smallexample
3753 hello, world
3754@end smallexample
3755
3756@noindent
3757with the conversion @samp{%10c} produces @code{" hello, wo"}, but
3758reading the same input with the conversion @samp{%10s} produces
3759@code{"hello,"}.
3760
3761@strong{Warning:} If you do not specify a field width for @samp{%s},
3762then the number of characters read is limited only by where the next
3763whitespace character appears. This almost certainly means that invalid
3764input can make your program crash---which is a bug.
3765
b5e73f56
UD
3766The @samp{%ls} and @samp{%S} format are handled just like @samp{%s}
3767except that the external byte sequence is converted using the conversion
3768associated with the stream to wide characters with their own encoding.
3769A width or precision specified with the format do not directly determine
3770how many bytes are read from the stream since they measure wide
3771characters. But an upper limit can be computed by multiplying the value
3772of the width or precision by @code{MB_CUR_MAX}.
3773
28f540f4
RM
3774To read in characters that belong to an arbitrary set of your choice,
3775use the @samp{%[} conversion. You specify the set between the @samp{[}
3776character and a following @samp{]} character, using the same syntax used
9878ad46 3777in regular expressions for explicit sets of characters. As special cases:
28f540f4
RM
3778
3779@itemize @bullet
19c3f208 3780@item
28f540f4
RM
3781A literal @samp{]} character can be specified as the first character
3782of the set.
3783
19c3f208 3784@item
28f540f4
RM
3785An embedded @samp{-} character (that is, one that is not the first or
3786last character of the set) is used to specify a range of characters.
3787
19c3f208 3788@item
28f540f4 3789If a caret character @samp{^} immediately follows the initial @samp{[},
c703cd7a 3790then the set of allowed input characters is everything @emph{except}
28f540f4
RM
3791the characters listed.
3792@end itemize
3793
3794The @samp{%[} conversion does not skip over initial whitespace
3795characters.
3796
9878ad46
OB
3797Note that the @dfn{character class} syntax available in character sets
3798that appear inside regular expressions (such as @samp{[:alpha:]}) is
3799@emph{not} available in the @samp{%[} conversion.
3800
28f540f4
RM
3801Here are some examples of @samp{%[} conversions and what they mean:
3802
3803@table @samp
3804@item %25[1234567890]
3805Matches a string of up to 25 digits.
3806
3807@item %25[][]
3808Matches a string of up to 25 square brackets.
3809
3810@item %25[^ \f\n\r\t\v]
3811Matches a string up to 25 characters long that doesn't contain any of
3812the standard whitespace characters. This is slightly different from
3813@samp{%s}, because if the input begins with a whitespace character,
3814@samp{%[} reports a matching failure while @samp{%s} simply discards the
3815initial whitespace.
3816
19c3f208 3817@item %25[a-z]
28f540f4
RM
3818Matches up to 25 lowercase characters.
3819@end table
3820
b5e73f56
UD
3821As for @samp{%c} and @samp{%s} the @samp{%[} format is also modified to
3822produce wide characters if the @samp{l} modifier is present. All what
3823is said about @samp{%ls} above is true for @samp{%l[}.
3824
28f540f4
RM
3825One more reminder: the @samp{%s} and @samp{%[} conversions are
3826@strong{dangerous} if you don't specify a maximum width or use the
3827@samp{a} flag, because input too long would overflow whatever buffer you
3828have provided for it. No matter how long your buffer is, a user could
3829supply input that is longer. A well-written program reports invalid
3830input with a comprehensible error message, not with a crash.
3831
3832@node Dynamic String Input
3833@subsection Dynamically Allocating String Conversions
3834
3835A GNU extension to formatted input lets you safely read a string with no
3836maximum size. Using this feature, you don't supply a buffer; instead,
3837@code{scanf} allocates a buffer big enough to hold the data and gives
3838you its address. To use this feature, write @samp{a} as a flag
3839character, as in @samp{%as} or @samp{%a[0-9a-z]}.
3840
3841The pointer argument you supply for where to store the input should have
3842type @code{char **}. The @code{scanf} function allocates a buffer and
3843stores its address in the word that the argument points to. You should
3844free the buffer with @code{free} when you no longer need it.
3845
3846Here is an example of using the @samp{a} flag with the @samp{%[@dots{}]}
3847conversion specification to read a ``variable assignment'' of the form
3848@samp{@var{variable} = @var{value}}.
3849
3850@smallexample
3851@{
3852 char *variable, *value;
3853
3854 if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n",
162ba701 3855 &variable, &value))
28f540f4
RM
3856 @{
3857 invalid_input_error ();
3858 return 0;
3859 @}
3860
3861 @dots{}
3862@}
3863@end smallexample
3864
3865@node Other Input Conversions
3866@subsection Other Input Conversions
3867
3868This section describes the miscellaneous input conversions.
3869
3870The @samp{%p} conversion is used to read a pointer value. It recognizes
04b9968b 3871the same syntax used by the @samp{%p} output conversion for
28f540f4
RM
3872@code{printf} (@pxref{Other Output Conversions}); that is, a hexadecimal
3873number just as the @samp{%x} conversion accepts. The corresponding
3874argument should be of type @code{void **}; that is, the address of a
3875place to store a pointer.
3876
3877The resulting pointer value is not guaranteed to be valid if it was not
3878originally written during the same program execution that reads it in.
3879
3880The @samp{%n} conversion produces the number of characters read so far
3881by this call. The corresponding argument should be of type @code{int *}.
3882This conversion works in the same way as the @samp{%n} conversion for
3883@code{printf}; see @ref{Other Output Conversions}, for an example.
3884
3885The @samp{%n} conversion is the only mechanism for determining the
3886success of literal matches or conversions with suppressed assignments.
3887If the @samp{%n} follows the locus of a matching failure, then no value
3888is stored for it since @code{scanf} returns before processing the
3889@samp{%n}. If you store @code{-1} in that argument slot before calling
3890@code{scanf}, the presence of @code{-1} after @code{scanf} indicates an
3891error occurred before the @samp{%n} was reached.
3892
3893Finally, the @samp{%%} conversion matches a literal @samp{%} character
3894in the input stream, without using an argument. This conversion does
3895not permit any flags, field width, or type modifier to be specified.
3896
3897@node Formatted Input Functions
3898@subsection Formatted Input Functions
3899
3900Here are the descriptions of the functions for performing formatted
3901input.
3902Prototypes for these functions are in the header file @file{stdio.h}.
3903@pindex stdio.h
3904
28f540f4 3905@deftypefun int scanf (const char *@var{template}, @dots{})
d08a7e4c 3906@standards{ISO, stdio.h}
171e9210 3907@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
3908The @code{scanf} function reads formatted input from the stream
3909@code{stdin} under the control of the template string @var{template}.
3910The optional arguments are pointers to the places which receive the
3911resulting values.
3912
3913The return value is normally the number of successful assignments. If
04b9968b
UD
3914an end-of-file condition is detected before any matches are performed,
3915including matches against whitespace and literal characters in the
3916template, then @code{EOF} is returned.
28f540f4
RM
3917@end deftypefun
3918
b5e73f56 3919@deftypefun int wscanf (const wchar_t *@var{template}, @dots{})
d08a7e4c 3920@standards{ISO, wchar.h}
171e9210 3921@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
3922The @code{wscanf} function reads formatted input from the stream
3923@code{stdin} under the control of the template string @var{template}.
3924The optional arguments are pointers to the places which receive the
3925resulting values.
3926
3927The return value is normally the number of successful assignments. If
3928an end-of-file condition is detected before any matches are performed,
3929including matches against whitespace and literal characters in the
3930template, then @code{WEOF} is returned.
3931@end deftypefun
3932
28f540f4 3933@deftypefun int fscanf (FILE *@var{stream}, const char *@var{template}, @dots{})
d08a7e4c 3934@standards{ISO, stdio.h}
171e9210 3935@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
3936This function is just like @code{scanf}, except that the input is read
3937from the stream @var{stream} instead of @code{stdin}.
3938@end deftypefun
3939
b5e73f56 3940@deftypefun int fwscanf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
d08a7e4c 3941@standards{ISO, wchar.h}
171e9210 3942@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
3943This function is just like @code{wscanf}, except that the input is read
3944from the stream @var{stream} instead of @code{stdin}.
3945@end deftypefun
3946
28f540f4 3947@deftypefun int sscanf (const char *@var{s}, const char *@var{template}, @dots{})
d08a7e4c 3948@standards{ISO, stdio.h}
171e9210 3949@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
3950This is like @code{scanf}, except that the characters are taken from the
3951null-terminated string @var{s} instead of from a stream. Reaching the
3952end of the string is treated as an end-of-file condition.
3953
3954The behavior of this function is undefined if copying takes place
3955between objects that overlap---for example, if @var{s} is also given
b5e73f56
UD
3956as an argument to receive a string read under control of the @samp{%s},
3957@samp{%S}, or @samp{%[} conversion.
3958@end deftypefun
3959
8ded91fb 3960@deftypefun int swscanf (const wchar_t *@var{ws}, const wchar_t *@var{template}, @dots{})
d08a7e4c 3961@standards{ISO, wchar.h}
171e9210 3962@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
3963This is like @code{wscanf}, except that the characters are taken from the
3964null-terminated string @var{ws} instead of from a stream. Reaching the
3965end of the string is treated as an end-of-file condition.
3966
3967The behavior of this function is undefined if copying takes place
3968between objects that overlap---for example, if @var{ws} is also given as
3969an argument to receive a string read under control of the @samp{%s},
3970@samp{%S}, or @samp{%[} conversion.
28f540f4
RM
3971@end deftypefun
3972
3973@node Variable Arguments Input
3974@subsection Variable Arguments Input Functions
3975
3976The functions @code{vscanf} and friends are provided so that you can
3977define your own variadic @code{scanf}-like functions that make use of
3978the same internals as the built-in formatted output functions.
3979These functions are analogous to the @code{vprintf} series of output
3980functions. @xref{Variable Arguments Output}, for important
3981information on how to use them.
3982
b5e73f56
UD
3983@strong{Portability Note:} The functions listed in this section were
3984introduced in @w{ISO C99} and were before available as GNU extensions.
28f540f4 3985
28f540f4 3986@deftypefun int vscanf (const char *@var{template}, va_list @var{ap})
d08a7e4c 3987@standards{ISO, stdio.h}
171e9210 3988@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
04b9968b 3989This function is similar to @code{scanf}, but instead of taking
28f540f4
RM
3990a variable number of arguments directly, it takes an argument list
3991pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
3992@end deftypefun
3993
b5e73f56 3994@deftypefun int vwscanf (const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 3995@standards{ISO, wchar.h}
171e9210 3996@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
3997This function is similar to @code{wscanf}, but instead of taking
3998a variable number of arguments directly, it takes an argument list
3999pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
4000@end deftypefun
4001
28f540f4 4002@deftypefun int vfscanf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
d08a7e4c 4003@standards{ISO, stdio.h}
171e9210 4004@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
4005This is the equivalent of @code{fscanf} with the variable argument list
4006specified directly as for @code{vscanf}.
4007@end deftypefun
4008
b5e73f56 4009@deftypefun int vfwscanf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 4010@standards{ISO, wchar.h}
171e9210 4011@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
4012This is the equivalent of @code{fwscanf} with the variable argument list
4013specified directly as for @code{vwscanf}.
4014@end deftypefun
4015
28f540f4 4016@deftypefun int vsscanf (const char *@var{s}, const char *@var{template}, va_list @var{ap})
d08a7e4c 4017@standards{ISO, stdio.h}
171e9210 4018@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
4019This is the equivalent of @code{sscanf} with the variable argument list
4020specified directly as for @code{vscanf}.
4021@end deftypefun
4022
b5e73f56 4023@deftypefun int vswscanf (const wchar_t *@var{s}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 4024@standards{ISO, wchar.h}
171e9210 4025@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
4026This is the equivalent of @code{swscanf} with the variable argument list
4027specified directly as for @code{vwscanf}.
4028@end deftypefun
4029
28f540f4
RM
4030In GNU C, there is a special construct you can use to let the compiler
4031know that a function uses a @code{scanf}-style format string. Then it
4032can check the number and types of arguments in each call to the
4033function, and warn you when they do not match the format string.
88197030 4034For details, see @ref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 4035gcc, Using GNU CC}.
28f540f4
RM
4036
4037@node EOF and Errors
4038@section End-Of-File and Errors
4039
4040@cindex end of file, on a stream
4041Many of the functions described in this chapter return the value of the
4042macro @code{EOF} to indicate unsuccessful completion of the operation.
4043Since @code{EOF} is used to report both end of file and random errors,
4044it's often better to use the @code{feof} function to check explicitly
4045for end of file and @code{ferror} to check for errors. These functions
4046check indicators that are part of the internal state of the stream
4047object, indicators set if the appropriate condition was detected by a
4048previous I/O operation on that stream.
4049
28f540f4 4050@deftypevr Macro int EOF
d08a7e4c 4051@standards{ISO, stdio.h}
b5e73f56
UD
4052This macro is an integer value that is returned by a number of narrow
4053stream functions to indicate an end-of-file condition, or some other
1f77f049 4054error situation. With @theglibc{}, @code{EOF} is @code{-1}. In
b5e73f56
UD
4055other libraries, its value may be some other negative number.
4056
4057This symbol is declared in @file{stdio.h}.
4058@end deftypevr
4059
b5e73f56 4060@deftypevr Macro int WEOF
d08a7e4c 4061@standards{ISO, wchar.h}
b5e73f56
UD
4062This macro is an integer value that is returned by a number of wide
4063stream functions to indicate an end-of-file condition, or some other
1f77f049 4064error situation. With @theglibc{}, @code{WEOF} is @code{-1}. In
b5e73f56
UD
4065other libraries, its value may be some other negative number.
4066
4067This symbol is declared in @file{wchar.h}.
28f540f4
RM
4068@end deftypevr
4069
28f540f4 4070@deftypefun int feof (FILE *@var{stream})
d08a7e4c 4071@standards{ISO, stdio.h}
171e9210 4072@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
28f540f4
RM
4073The @code{feof} function returns nonzero if and only if the end-of-file
4074indicator for the stream @var{stream} is set.
b5e73f56
UD
4075
4076This symbol is declared in @file{stdio.h}.
28f540f4
RM
4077@end deftypefun
4078
7b4161bb 4079@deftypefun int feof_unlocked (FILE *@var{stream})
d08a7e4c 4080@standards{GNU, stdio.h}
171e9210
AO
4081@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
4082@c There isn't much of a thread unsafety risk in reading a flag word and
4083@c testing a bit in it.
7b4161bb 4084The @code{feof_unlocked} function is equivalent to the @code{feof}
1dc843f7 4085function except that it does not implicitly lock the stream.
7b4161bb
UD
4086
4087This function is a GNU extension.
b5e73f56
UD
4088
4089This symbol is declared in @file{stdio.h}.
7b4161bb
UD
4090@end deftypefun
4091
28f540f4 4092@deftypefun int ferror (FILE *@var{stream})
d08a7e4c 4093@standards{ISO, stdio.h}
171e9210 4094@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
28f540f4
RM
4095The @code{ferror} function returns nonzero if and only if the error
4096indicator for the stream @var{stream} is set, indicating that an error
4097has occurred on a previous operation on the stream.
b5e73f56
UD
4098
4099This symbol is declared in @file{stdio.h}.
28f540f4
RM
4100@end deftypefun
4101
7b4161bb 4102@deftypefun int ferror_unlocked (FILE *@var{stream})
d08a7e4c 4103@standards{GNU, stdio.h}
171e9210 4104@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7b4161bb 4105The @code{ferror_unlocked} function is equivalent to the @code{ferror}
1dc843f7 4106function except that it does not implicitly lock the stream.
7b4161bb
UD
4107
4108This function is a GNU extension.
b5e73f56
UD
4109
4110This symbol is declared in @file{stdio.h}.
7b4161bb
UD
4111@end deftypefun
4112
28f540f4
RM
4113In addition to setting the error indicator associated with the stream,
4114the functions that operate on streams also set @code{errno} in the same
4115way as the corresponding low-level functions that operate on file
4116descriptors. For example, all of the functions that perform output to a
4117stream---such as @code{fputc}, @code{printf}, and @code{fflush}---are
4118implemented in terms of @code{write}, and all of the @code{errno} error
4119conditions defined for @code{write} are meaningful for these functions.
4120For more information about the descriptor-level I/O functions, see
4121@ref{Low-Level I/O}.
4122
460e040a
UD
4123@node Error Recovery
4124@section Recovering from errors
4125
7ba73c63 4126You may explicitly clear the error and EOF flags with the @code{clearerr}
460e040a
UD
4127function.
4128
460e040a 4129@deftypefun void clearerr (FILE *@var{stream})
d08a7e4c 4130@standards{ISO, stdio.h}
171e9210 4131@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
460e040a
UD
4132This function clears the end-of-file and error indicators for the
4133stream @var{stream}.
4134
4135The file positioning functions (@pxref{File Positioning}) also clear the
4136end-of-file indicator for the stream.
4137@end deftypefun
4138
7b4161bb 4139@deftypefun void clearerr_unlocked (FILE *@var{stream})
d08a7e4c 4140@standards{GNU, stdio.h}
171e9210 4141@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@assafe{}@acsafe{}}
7b4161bb 4142The @code{clearerr_unlocked} function is equivalent to the @code{clearerr}
1dc843f7 4143function except that it does not implicitly lock the stream.
7b4161bb
UD
4144
4145This function is a GNU extension.
4146@end deftypefun
4147
460e040a
UD
4148Note that it is @emph{not} correct to just clear the error flag and retry
4149a failed stream operation. After a failed write, any number of
4150characters since the last buffer flush may have been committed to the
4151file, while some buffered data may have been discarded. Merely retrying
4152can thus cause lost or repeated data.
4153
4154A failed read may leave the file pointer in an inappropriate position for
4155a second try. In both cases, you should seek to a known position before
4156retrying.
4157
4158Most errors that can happen are not recoverable --- a second try will
4159always fail again in the same way. So usually it is best to give up and
4160report the error to the user, rather than install complicated recovery
4161logic.
4162
7ba73c63 4163One important exception is @code{EINTR} (@pxref{Interrupted Primitives}).
460e040a
UD
4164Many stream I/O implementations will treat it as an ordinary error, which
4165can be quite inconvenient. You can avoid this hassle by installing all
4166signals with the @code{SA_RESTART} flag.
4167
4168For similar reasons, setting nonblocking I/O on a stream's file
4169descriptor is not usually advisable.
4170
28f540f4
RM
4171@node Binary Streams
4172@section Text and Binary Streams
4173
a7a93d50 4174@gnusystems{} and other POSIX-compatible operating systems organize all
28f540f4
RM
4175files as uniform sequences of characters. However, some other systems
4176make a distinction between files containing text and files containing
f65fd747 4177binary data, and the input and output facilities of @w{ISO C} provide for
28f540f4
RM
4178this distinction. This section tells you how to write programs portable
4179to such systems.
4180
4181@cindex text stream
4182@cindex binary stream
4183When you open a stream, you can specify either a @dfn{text stream} or a
4184@dfn{binary stream}. You indicate that you want a binary stream by
4185specifying the @samp{b} modifier in the @var{opentype} argument to
4186@code{fopen}; see @ref{Opening Streams}. Without this
4187option, @code{fopen} opens the file as a text stream.
4188
4189Text and binary streams differ in several ways:
4190
4191@itemize @bullet
4192@item
4193The data read from a text stream is divided into @dfn{lines} which are
4194terminated by newline (@code{'\n'}) characters, while a binary stream is
4195simply a long series of characters. A text stream might on some systems
4196fail to handle lines more than 254 characters long (including the
4197terminating newline character).
4198@cindex lines (in a text file)
4199
4200@item
4201On some systems, text files can contain only printing characters,
4202horizontal tab characters, and newlines, and so text streams may not
4203support other characters. However, binary streams can handle any
4204character value.
4205
4206@item
4207Space characters that are written immediately preceding a newline
4208character in a text stream may disappear when the file is read in again.
4209
4210@item
4211More generally, there need not be a one-to-one mapping between
4212characters that are read from or written to a text stream, and the
4213characters in the actual file.
4214@end itemize
4215
4216Since a binary stream is always more capable and more predictable than a
4217text stream, you might wonder what purpose text streams serve. Why not
4218simply always use binary streams? The answer is that on these operating
4219systems, text and binary streams use different file formats, and the
4220only way to read or write ``an ordinary file of text'' that can work
4221with other text-oriented programs is through a text stream.
4222
1f77f049 4223In @theglibc{}, and on all POSIX systems, there is no difference
28f540f4
RM
4224between text streams and binary streams. When you open a stream, you
4225get the same kind of stream regardless of whether you ask for binary.
4226This stream can handle any file content, and has none of the
4227restrictions that text streams sometimes have.
4228
4229@node File Positioning
4230@section File Positioning
4231@cindex file positioning on a stream
4232@cindex positioning a stream
4233@cindex seeking on a stream
4234
4235The @dfn{file position} of a stream describes where in the file the
4236stream is currently reading or writing. I/O on the stream advances the
a7a93d50 4237file position through the file. On @gnusystems{}, the file position is
28f540f4
RM
4238represented as an integer, which counts the number of bytes from the
4239beginning of the file. @xref{File Position}.
4240
4241During I/O to an ordinary disk file, you can change the file position
4242whenever you wish, so as to read or write any portion of the file. Some
4243other kinds of files may also permit this. Files which support changing
4244the file position are sometimes referred to as @dfn{random-access}
4245files.
4246
4247You can use the functions in this section to examine or modify the file
4248position indicator associated with a stream. The symbols listed below
4249are declared in the header file @file{stdio.h}.
4250@pindex stdio.h
4251
28f540f4 4252@deftypefun {long int} ftell (FILE *@var{stream})
d08a7e4c 4253@standards{ISO, stdio.h}
171e9210 4254@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4255This function returns the current file position of the stream
4256@var{stream}.
4257
4258This function can fail if the stream doesn't support file positioning,
4259or if the file position can't be represented in a @code{long int}, and
4260possibly for other reasons as well. If a failure occurs, a value of
4261@code{-1} is returned.
4262@end deftypefun
4263
a5a0310d 4264@deftypefun off_t ftello (FILE *@var{stream})
d08a7e4c 4265@standards{Unix98, stdio.h}
171e9210 4266@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
04b9968b
UD
4267The @code{ftello} function is similar to @code{ftell}, except that it
4268returns a value of type @code{off_t}. Systems which support this type
4269use it to describe all file positions, unlike the POSIX specification
4270which uses a long int. The two are not necessarily the same size.
4271Therefore, using ftell can lead to problems if the implementation is
4272written on top of a POSIX compliant low-level I/O implementation, and using
4273@code{ftello} is preferable whenever it is available.
4274
4275If this function fails it returns @code{(off_t) -1}. This can happen due
a5a0310d
UD
4276to missing support for file positioning or internal errors. Otherwise
4277the return value is the current file position.
4278
4279The function is an extension defined in the Unix Single Specification
4280version 2.
a3a4a74e
UD
4281
4282When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 428332 bit system this function is in fact @code{ftello64}. I.e., the
a3a4a74e
UD
4284LFS interface transparently replaces the old interface.
4285@end deftypefun
4286
a3a4a74e 4287@deftypefun off64_t ftello64 (FILE *@var{stream})
d08a7e4c 4288@standards{Unix98, stdio.h}
171e9210 4289@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4290This function is similar to @code{ftello} with the only difference that
4291the return value is of type @code{off64_t}. This also requires that the
4292stream @var{stream} was opened using either @code{fopen64},
4293@code{freopen64}, or @code{tmpfile64} since otherwise the underlying
9ceeb279 4294file operations to position the file pointer beyond the @twoexp{31}
a3a4a74e
UD
4295bytes limit might fail.
4296
4297If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4298bits machine this function is available under the name @code{ftello}
4299and so transparently replaces the old interface.
a5a0310d
UD
4300@end deftypefun
4301
28f540f4 4302@deftypefun int fseek (FILE *@var{stream}, long int @var{offset}, int @var{whence})
d08a7e4c 4303@standards{ISO, stdio.h}
171e9210 4304@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4305The @code{fseek} function is used to change the file position of the
4306stream @var{stream}. The value of @var{whence} must be one of the
4307constants @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}, to
4308indicate whether the @var{offset} is relative to the beginning of the
4309file, the current file position, or the end of the file, respectively.
4310
4311This function returns a value of zero if the operation was successful,
4312and a nonzero value to indicate failure. A successful call also clears
4313the end-of-file indicator of @var{stream} and discards any characters
4314that were ``pushed back'' by the use of @code{ungetc}.
4315
4316@code{fseek} either flushes any buffered output before setting the file
4317position or else remembers it so it will be written later in its proper
4318place in the file.
4319@end deftypefun
4320
a5a0310d 4321@deftypefun int fseeko (FILE *@var{stream}, off_t @var{offset}, int @var{whence})
d08a7e4c 4322@standards{Unix98, stdio.h}
171e9210 4323@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a5a0310d
UD
4324This function is similar to @code{fseek} but it corrects a problem with
4325@code{fseek} in a system with POSIX types. Using a value of type
4326@code{long int} for the offset is not compatible with POSIX.
4327@code{fseeko} uses the correct type @code{off_t} for the @var{offset}
4328parameter.
4329
f2ea0f5b 4330For this reason it is a good idea to prefer @code{ftello} whenever it is
a5a0310d
UD
4331available since its functionality is (if different at all) closer the
4332underlying definition.
4333
c703cd7a 4334The functionality and return value are the same as for @code{fseek}.
a5a0310d
UD
4335
4336The function is an extension defined in the Unix Single Specification
4337version 2.
a3a4a74e
UD
4338
4339When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 434032 bit system this function is in fact @code{fseeko64}. I.e., the
a3a4a74e
UD
4341LFS interface transparently replaces the old interface.
4342@end deftypefun
4343
a3a4a74e 4344@deftypefun int fseeko64 (FILE *@var{stream}, off64_t @var{offset}, int @var{whence})
d08a7e4c 4345@standards{Unix98, stdio.h}
171e9210 4346@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4347This function is similar to @code{fseeko} with the only difference that
4348the @var{offset} parameter is of type @code{off64_t}. This also
4349requires that the stream @var{stream} was opened using either
4350@code{fopen64}, @code{freopen64}, or @code{tmpfile64} since otherwise
4351the underlying file operations to position the file pointer beyond the
9ceeb279 4352@twoexp{31} bytes limit might fail.
a3a4a74e
UD
4353
4354If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4355bits machine this function is available under the name @code{fseeko}
4356and so transparently replaces the old interface.
a5a0310d
UD
4357@end deftypefun
4358
4359@strong{Portability Note:} In non-POSIX systems, @code{ftell},
4360@code{ftello}, @code{fseek} and @code{fseeko} might work reliably only
4361on binary streams. @xref{Binary Streams}.
28f540f4
RM
4362
4363The following symbolic constants are defined for use as the @var{whence}
4364argument to @code{fseek}. They are also used with the @code{lseek}
4365function (@pxref{I/O Primitives}) and to specify offsets for file locks
4366(@pxref{Control Operations}).
4367
28f540f4 4368@deftypevr Macro int SEEK_SET
d08a7e4c 4369@standards{ISO, stdio.h}
28f540f4 4370This is an integer constant which, when used as the @var{whence}
c703cd7a 4371argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4372the offset provided is relative to the beginning of the file.
28f540f4
RM
4373@end deftypevr
4374
28f540f4 4375@deftypevr Macro int SEEK_CUR
d08a7e4c 4376@standards{ISO, stdio.h}
28f540f4 4377This is an integer constant which, when used as the @var{whence}
c703cd7a 4378argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4379the offset provided is relative to the current file position.
28f540f4
RM
4380@end deftypevr
4381
28f540f4 4382@deftypevr Macro int SEEK_END
d08a7e4c 4383@standards{ISO, stdio.h}
28f540f4 4384This is an integer constant which, when used as the @var{whence}
c703cd7a 4385argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4386the offset provided is relative to the end of the file.
28f540f4
RM
4387@end deftypevr
4388
28f540f4 4389@deftypefun void rewind (FILE *@var{stream})
d08a7e4c 4390@standards{ISO, stdio.h}
171e9210 4391@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4 4392The @code{rewind} function positions the stream @var{stream} at the
f2ea0f5b 4393beginning of the file. It is equivalent to calling @code{fseek} or
a5a0310d
UD
4394@code{fseeko} on the @var{stream} with an @var{offset} argument of
4395@code{0L} and a @var{whence} argument of @code{SEEK_SET}, except that
4396the return value is discarded and the error indicator for the stream is
4397reset.
28f540f4
RM
4398@end deftypefun
4399
4400These three aliases for the @samp{SEEK_@dots{}} constants exist for the
4401sake of compatibility with older BSD systems. They are defined in two
4402different header files: @file{fcntl.h} and @file{sys/file.h}.
4403
2fe82ca6 4404@vtable @code
28f540f4 4405@item L_SET
d08a7e4c 4406@standards{BSD, sys/file.h}
28f540f4
RM
4407An alias for @code{SEEK_SET}.
4408
28f540f4 4409@item L_INCR
d08a7e4c 4410@standards{BSD, sys/file.h}
28f540f4
RM
4411An alias for @code{SEEK_CUR}.
4412
28f540f4 4413@item L_XTND
d08a7e4c 4414@standards{BSD, sys/file.h}
28f540f4 4415An alias for @code{SEEK_END}.
2fe82ca6 4416@end vtable
28f540f4
RM
4417
4418@node Portable Positioning
4419@section Portable File-Position Functions
4420
a7a93d50 4421On @gnusystems{}, the file position is truly a character count. You
a5a0310d
UD
4422can specify any character count value as an argument to @code{fseek} or
4423@code{fseeko} and get reliable results for any random access file.
4424However, some @w{ISO C} systems do not represent file positions in this
4425way.
28f540f4
RM
4426
4427On some systems where text streams truly differ from binary streams, it
4428is impossible to represent the file position of a text stream as a count
4429of characters from the beginning of the file. For example, the file
4430position on some systems must encode both a record offset within the
4431file, and a character offset within the record.
4432
4433As a consequence, if you want your programs to be portable to these
4434systems, you must observe certain rules:
4435
4436@itemize @bullet
4437@item
4438The value returned from @code{ftell} on a text stream has no predictable
4439relationship to the number of characters you have read so far. The only
4440thing you can rely on is that you can use it subsequently as the
a5a0310d
UD
4441@var{offset} argument to @code{fseek} or @code{fseeko} to move back to
4442the same file position.
28f540f4 4443
19c3f208 4444@item
a5a0310d 4445In a call to @code{fseek} or @code{fseeko} on a text stream, either the
04b9968b 4446@var{offset} must be zero, or @var{whence} must be @code{SEEK_SET} and
ded5b9b7 4447the @var{offset} must be the result of an earlier call to @code{ftell}
04b9968b 4448on the same stream.
28f540f4
RM
4449
4450@item
4451The value of the file position indicator of a text stream is undefined
4452while there are characters that have been pushed back with @code{ungetc}
4453that haven't been read or discarded. @xref{Unreading}.
4454@end itemize
4455
4456But even if you observe these rules, you may still have trouble for long
4457files, because @code{ftell} and @code{fseek} use a @code{long int} value
4458to represent the file position. This type may not have room to encode
a5a0310d
UD
4459all the file positions in a large file. Using the @code{ftello} and
4460@code{fseeko} functions might help here since the @code{off_t} type is
4461expected to be able to hold all file position values but this still does
4462not help to handle additional information which must be associated with
4463a file position.
28f540f4
RM
4464
4465So if you do want to support systems with peculiar encodings for the
4466file positions, it is better to use the functions @code{fgetpos} and
4467@code{fsetpos} instead. These functions represent the file position
4468using the data type @code{fpos_t}, whose internal representation varies
4469from system to system.
4470
4471These symbols are declared in the header file @file{stdio.h}.
4472@pindex stdio.h
4473
28f540f4 4474@deftp {Data Type} fpos_t
d08a7e4c 4475@standards{ISO, stdio.h}
28f540f4
RM
4476This is the type of an object that can encode information about the
4477file position of a stream, for use by the functions @code{fgetpos} and
4478@code{fsetpos}.
4479
a7a93d50 4480In @theglibc{}, @code{fpos_t} is an opaque data structure that
5988b69d
AJ
4481contains internal data to represent file offset and conversion state
4482information. In other systems, it might have a different internal
28f540f4 4483representation.
a3a4a74e 4484
0be8752b 4485When compiling with @code{_FILE_OFFSET_BITS == 64} on a 32 bit machine
5988b69d
AJ
4486this type is in fact equivalent to @code{fpos64_t} since the LFS
4487interface transparently replaces the old interface.
a3a4a74e
UD
4488@end deftp
4489
a3a4a74e 4490@deftp {Data Type} fpos64_t
d08a7e4c 4491@standards{Unix98, stdio.h}
a3a4a74e
UD
4492This is the type of an object that can encode information about the
4493file position of a stream, for use by the functions @code{fgetpos64} and
4494@code{fsetpos64}.
4495
a7a93d50 4496In @theglibc{}, @code{fpos64_t} is an opaque data structure that
5988b69d
AJ
4497contains internal data to represent file offset and conversion state
4498information. In other systems, it might have a different internal
a3a4a74e 4499representation.
28f540f4
RM
4500@end deftp
4501
28f540f4 4502@deftypefun int fgetpos (FILE *@var{stream}, fpos_t *@var{position})
d08a7e4c 4503@standards{ISO, stdio.h}
171e9210 4504@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4505This function stores the value of the file position indicator for the
4506stream @var{stream} in the @code{fpos_t} object pointed to by
4507@var{position}. If successful, @code{fgetpos} returns zero; otherwise
4508it returns a nonzero value and stores an implementation-defined positive
4509value in @code{errno}.
a3a4a74e
UD
4510
4511When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 451232 bit system the function is in fact @code{fgetpos64}. I.e., the LFS
5988b69d 4513interface transparently replaces the old interface.
a3a4a74e
UD
4514@end deftypefun
4515
a3a4a74e 4516@deftypefun int fgetpos64 (FILE *@var{stream}, fpos64_t *@var{position})
d08a7e4c 4517@standards{Unix98, stdio.h}
171e9210 4518@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4519This function is similar to @code{fgetpos} but the file position is
4520returned in a variable of type @code{fpos64_t} to which @var{position}
4521points.
4522
4523If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4524bits machine this function is available under the name @code{fgetpos}
4525and so transparently replaces the old interface.
28f540f4
RM
4526@end deftypefun
4527
a3a4a74e 4528@deftypefun int fsetpos (FILE *@var{stream}, const fpos_t *@var{position})
d08a7e4c 4529@standards{ISO, stdio.h}
171e9210 4530@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4531This function sets the file position indicator for the stream @var{stream}
4532to the position @var{position}, which must have been set by a previous
4533call to @code{fgetpos} on the same stream. If successful, @code{fsetpos}
4534clears the end-of-file indicator on the stream, discards any characters
4535that were ``pushed back'' by the use of @code{ungetc}, and returns a value
4536of zero. Otherwise, @code{fsetpos} returns a nonzero value and stores
4537an implementation-defined positive value in @code{errno}.
a3a4a74e
UD
4538
4539When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 454032 bit system the function is in fact @code{fsetpos64}. I.e., the LFS
5988b69d 4541interface transparently replaces the old interface.
a3a4a74e
UD
4542@end deftypefun
4543
a3a4a74e 4544@deftypefun int fsetpos64 (FILE *@var{stream}, const fpos64_t *@var{position})
d08a7e4c 4545@standards{Unix98, stdio.h}
171e9210 4546@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4547This function is similar to @code{fsetpos} but the file position used
4548for positioning is provided in a variable of type @code{fpos64_t} to
4549which @var{position} points.
4550
4551If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4552bits machine this function is available under the name @code{fsetpos}
4553and so transparently replaces the old interface.
28f540f4
RM
4554@end deftypefun
4555
4556@node Stream Buffering
4557@section Stream Buffering
4558
4559@cindex buffering of streams
4560Characters that are written to a stream are normally accumulated and
4561transmitted asynchronously to the file in a block, instead of appearing
4562as soon as they are output by the application program. Similarly,
4563streams often retrieve input from the host environment in blocks rather
4564than on a character-by-character basis. This is called @dfn{buffering}.
4565
4566If you are writing programs that do interactive input and output using
4567streams, you need to understand how buffering works when you design the
4568user interface to your program. Otherwise, you might find that output
4569(such as progress or prompt messages) doesn't appear when you intended
04b9968b 4570it to, or displays some other unexpected behavior.
28f540f4
RM
4571
4572This section deals only with controlling when characters are transmitted
4573between the stream and the file or device, and @emph{not} with how
4574things like echoing, flow control, and the like are handled on specific
4575classes of devices. For information on common control operations on
4576terminal devices, see @ref{Low-Level Terminal Interface}.
4577
4578You can bypass the stream buffering facilities altogether by using the
4579low-level input and output functions that operate on file descriptors
4580instead. @xref{Low-Level I/O}.
4581
4582@menu
4583* Buffering Concepts:: Terminology is defined here.
4584* Flushing Buffers:: How to ensure that output buffers are flushed.
4585* Controlling Buffering:: How to specify what kind of buffering to use.
4586@end menu
4587
4588@node Buffering Concepts
4589@subsection Buffering Concepts
4590
4591There are three different kinds of buffering strategies:
4592
4593@itemize @bullet
4594@item
4595Characters written to or read from an @dfn{unbuffered} stream are
4596transmitted individually to or from the file as soon as possible.
4597@cindex unbuffered stream
4598
4599@item
4600Characters written to a @dfn{line buffered} stream are transmitted to
4601the file in blocks when a newline character is encountered.
4602@cindex line buffered stream
4603
4604@item
4605Characters written to or read from a @dfn{fully buffered} stream are
4606transmitted to or from the file in blocks of arbitrary size.
4607@cindex fully buffered stream
4608@end itemize
4609
4610Newly opened streams are normally fully buffered, with one exception: a
4611stream connected to an interactive device such as a terminal is
4612initially line buffered. @xref{Controlling Buffering}, for information
4613on how to select a different kind of buffering. Usually the automatic
4614selection gives you the most convenient kind of buffering for the file
4615or device you open.
4616
4617The use of line buffering for interactive devices implies that output
4618messages ending in a newline will appear immediately---which is usually
4619what you want. Output that doesn't end in a newline might or might not
4620show up immediately, so if you want them to appear immediately, you
4621should flush buffered output explicitly with @code{fflush}, as described
4622in @ref{Flushing Buffers}.
4623
4624@node Flushing Buffers
4625@subsection Flushing Buffers
4626
4627@cindex flushing a stream
4628@dfn{Flushing} output on a buffered stream means transmitting all
4629accumulated characters to the file. There are many circumstances when
4630buffered output on a stream is flushed automatically:
4631
4632@itemize @bullet
4633@item
4634When you try to do output and the output buffer is full.
4635
4636@item
4637When the stream is closed. @xref{Closing Streams}.
4638
19c3f208 4639@item
28f540f4
RM
4640When the program terminates by calling @code{exit}.
4641@xref{Normal Termination}.
4642
4643@item
4644When a newline is written, if the stream is line buffered.
4645
4646@item
4647Whenever an input operation on @emph{any} stream actually reads data
4648from its file.
4649@end itemize
4650
4651If you want to flush the buffered output at another time, call
4652@code{fflush}, which is declared in the header file @file{stdio.h}.
4653@pindex stdio.h
4654
28f540f4 4655@deftypefun int fflush (FILE *@var{stream})
d08a7e4c 4656@standards{ISO, stdio.h}
171e9210 4657@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4658This function causes any buffered output on @var{stream} to be delivered
4659to the file. If @var{stream} is a null pointer, then
4660@code{fflush} causes buffered output on @emph{all} open output streams
4661to be flushed.
4662
4663This function returns @code{EOF} if a write error occurs, or zero
4664otherwise.
4665@end deftypefun
4666
7b4161bb 4667@deftypefun int fflush_unlocked (FILE *@var{stream})
d08a7e4c 4668@standards{POSIX, stdio.h}
171e9210 4669@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 4670The @code{fflush_unlocked} function is equivalent to the @code{fflush}
1dc843f7 4671function except that it does not implicitly lock the stream.
7b4161bb
UD
4672@end deftypefun
4673
4674The @code{fflush} function can be used to flush all streams currently
4675opened. While this is useful in some situations it does often more than
4676necessary since it might be done in situations when terminal input is
4677required and the program wants to be sure that all output is visible on
4678the terminal. But this means that only line buffered streams have to be
4679flushed. Solaris introduced a function especially for this. It was
1f77f049 4680always available in @theglibc{} in some form but never officially
7b4161bb
UD
4681exported.
4682
7b4161bb 4683@deftypefun void _flushlbf (void)
d08a7e4c 4684@standards{GNU, stdio_ext.h}
171e9210 4685@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
7b4161bb
UD
4686The @code{_flushlbf} function flushes all line buffered streams
4687currently opened.
4688
4689This function is declared in the @file{stdio_ext.h} header.
4690@end deftypefun
4691
28f540f4
RM
4692@strong{Compatibility Note:} Some brain-damaged operating systems have
4693been known to be so thoroughly fixated on line-oriented input and output
4694that flushing a line buffered stream causes a newline to be written!
4695Fortunately, this ``feature'' seems to be becoming less common. You do
a7a93d50 4696not need to worry about this with @theglibc{}.
28f540f4 4697
7b4161bb
UD
4698In some situations it might be useful to not flush the output pending
4699for a stream but instead simply forget it. If transmission is costly
4700and the output is not needed anymore this is valid reasoning. In this
4701situation a non-standard function introduced in Solaris and available in
1f77f049 4702@theglibc{} can be used.
7b4161bb 4703
7b4161bb 4704@deftypefun void __fpurge (FILE *@var{stream})
d08a7e4c 4705@standards{GNU, stdio_ext.h}
171e9210 4706@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb
UD
4707The @code{__fpurge} function causes the buffer of the stream
4708@var{stream} to be emptied. If the stream is currently in read mode all
4709input in the buffer is lost. If the stream is in output mode the
4710buffered output is not written to the device (or whatever other
c703cd7a 4711underlying storage) and the buffer is cleared.
7b4161bb
UD
4712
4713This function is declared in @file{stdio_ext.h}.
4714@end deftypefun
28f540f4
RM
4715
4716@node Controlling Buffering
4717@subsection Controlling Which Kind of Buffering
4718
4719After opening a stream (but before any other operations have been
4720performed on it), you can explicitly specify what kind of buffering you
4721want it to have using the @code{setvbuf} function.
4722@cindex buffering, controlling
4723
4724The facilities listed in this section are declared in the header
4725file @file{stdio.h}.
4726@pindex stdio.h
4727
28f540f4 4728@deftypefun int setvbuf (FILE *@var{stream}, char *@var{buf}, int @var{mode}, size_t @var{size})
d08a7e4c 4729@standards{ISO, stdio.h}
171e9210 4730@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4731This function is used to specify that the stream @var{stream} should
4732have the buffering mode @var{mode}, which can be either @code{_IOFBF}
4733(for full buffering), @code{_IOLBF} (for line buffering), or
4734@code{_IONBF} (for unbuffered input/output).
4735
4736If you specify a null pointer as the @var{buf} argument, then @code{setvbuf}
4737allocates a buffer itself using @code{malloc}. This buffer will be freed
4738when you close the stream.
4739
4740Otherwise, @var{buf} should be a character array that can hold at least
4741@var{size} characters. You should not free the space for this array as
4742long as the stream remains open and this array remains its buffer. You
4743should usually either allocate it statically, or @code{malloc}
4744(@pxref{Unconstrained Allocation}) the buffer. Using an automatic array
4745is not a good idea unless you close the file before exiting the block
4746that declares the array.
4747
4748While the array remains a stream buffer, the stream I/O functions will
4749use the buffer for their internal purposes. You shouldn't try to access
4750the values in the array directly while the stream is using it for
4751buffering.
4752
4753The @code{setvbuf} function returns zero on success, or a nonzero value
4754if the value of @var{mode} is not valid or if the request could not
4755be honored.
4756@end deftypefun
4757
28f540f4 4758@deftypevr Macro int _IOFBF
d08a7e4c 4759@standards{ISO, stdio.h}
28f540f4
RM
4760The value of this macro is an integer constant expression that can be
4761used as the @var{mode} argument to the @code{setvbuf} function to
4762specify that the stream should be fully buffered.
4763@end deftypevr
4764
28f540f4 4765@deftypevr Macro int _IOLBF
d08a7e4c 4766@standards{ISO, stdio.h}
28f540f4
RM
4767The value of this macro is an integer constant expression that can be
4768used as the @var{mode} argument to the @code{setvbuf} function to
4769specify that the stream should be line buffered.
4770@end deftypevr
4771
28f540f4 4772@deftypevr Macro int _IONBF
d08a7e4c 4773@standards{ISO, stdio.h}
28f540f4
RM
4774The value of this macro is an integer constant expression that can be
4775used as the @var{mode} argument to the @code{setvbuf} function to
4776specify that the stream should be unbuffered.
4777@end deftypevr
4778
28f540f4 4779@deftypevr Macro int BUFSIZ
d08a7e4c 4780@standards{ISO, stdio.h}
28f540f4
RM
4781The value of this macro is an integer constant expression that is good
4782to use for the @var{size} argument to @code{setvbuf}. This value is
4783guaranteed to be at least @code{256}.
4784
4785The value of @code{BUFSIZ} is chosen on each system so as to make stream
19c3f208 4786I/O efficient. So it is a good idea to use @code{BUFSIZ} as the size
28f540f4
RM
4787for the buffer when you call @code{setvbuf}.
4788
4789Actually, you can get an even better value to use for the buffer size
4790by means of the @code{fstat} system call: it is found in the
4791@code{st_blksize} field of the file attributes. @xref{Attribute Meanings}.
4792
4793Sometimes people also use @code{BUFSIZ} as the allocation size of
4794buffers used for related purposes, such as strings used to receive a
4795line of input with @code{fgets} (@pxref{Character Input}). There is no
4796particular reason to use @code{BUFSIZ} for this instead of any other
4797integer, except that it might lead to doing I/O in chunks of an
4798efficient size.
4799@end deftypevr
4800
28f540f4 4801@deftypefun void setbuf (FILE *@var{stream}, char *@var{buf})
d08a7e4c 4802@standards{ISO, stdio.h}
171e9210 4803@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4804If @var{buf} is a null pointer, the effect of this function is
4805equivalent to calling @code{setvbuf} with a @var{mode} argument of
4806@code{_IONBF}. Otherwise, it is equivalent to calling @code{setvbuf}
4807with @var{buf}, and a @var{mode} of @code{_IOFBF} and a @var{size}
4808argument of @code{BUFSIZ}.
4809
4810The @code{setbuf} function is provided for compatibility with old code;
4811use @code{setvbuf} in all new programs.
4812@end deftypefun
4813
28f540f4 4814@deftypefun void setbuffer (FILE *@var{stream}, char *@var{buf}, size_t @var{size})
d08a7e4c 4815@standards{BSD, stdio.h}
171e9210 4816@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4817If @var{buf} is a null pointer, this function makes @var{stream} unbuffered.
4818Otherwise, it makes @var{stream} fully buffered using @var{buf} as the
4819buffer. The @var{size} argument specifies the length of @var{buf}.
4820
4821This function is provided for compatibility with old BSD code. Use
4822@code{setvbuf} instead.
4823@end deftypefun
4824
28f540f4 4825@deftypefun void setlinebuf (FILE *@var{stream})
d08a7e4c 4826@standards{BSD, stdio.h}
171e9210 4827@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4828This function makes @var{stream} be line buffered, and allocates the
4829buffer for you.
4830
4831This function is provided for compatibility with old BSD code. Use
4832@code{setvbuf} instead.
4833@end deftypefun
4834
7b4161bb 4835It is possible to query whether a given stream is line buffered or not
1f77f049
JM
4836using a non-standard function introduced in Solaris and available in
4837@theglibc{}.
7b4161bb 4838
7b4161bb 4839@deftypefun int __flbf (FILE *@var{stream})
d08a7e4c 4840@standards{GNU, stdio_ext.h}
171e9210 4841@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7b4161bb
UD
4842The @code{__flbf} function will return a nonzero value in case the
4843stream @var{stream} is line buffered. Otherwise the return value is
4844zero.
4845
4846This function is declared in the @file{stdio_ext.h} header.
4847@end deftypefun
4848
4849Two more extensions allow to determine the size of the buffer and how
4850much of it is used. These functions were also introduced in Solaris.
4851
7b4161bb 4852@deftypefun size_t __fbufsize (FILE *@var{stream})
d08a7e4c 4853@standards{GNU, stdio_ext.h}
171e9210 4854@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
7b4161bb
UD
4855The @code{__fbufsize} function return the size of the buffer in the
4856stream @var{stream}. This value can be used to optimize the use of the
4857stream.
4858
4859This function is declared in the @file{stdio_ext.h} header.
4860@end deftypefun
4861
cc6e48bc 4862@deftypefun size_t __fpending (FILE *@var{stream})
d08a7e4c 4863@standards{GNU, stdio_ext.h}
171e9210 4864@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
cc6e48bc 4865The @code{__fpending}
f126ef67 4866function returns the number of bytes currently in the output buffer.
c703cd7a 4867For wide-oriented streams the measuring unit is wide characters. This
f126ef67 4868function should not be used on buffers in read mode or opened read-only.
7b4161bb
UD
4869
4870This function is declared in the @file{stdio_ext.h} header.
4871@end deftypefun
4872
28f540f4
RM
4873@node Other Kinds of Streams
4874@section Other Kinds of Streams
4875
1f77f049 4876@Theglibc{} provides ways for you to define additional kinds of
28f540f4
RM
4877streams that do not necessarily correspond to an open file.
4878
4879One such type of stream takes input from or writes output to a string.
4880These kinds of streams are used internally to implement the
4881@code{sprintf} and @code{sscanf} functions. You can also create such a
4882stream explicitly, using the functions described in @ref{String Streams}.
4883
4884More generally, you can define streams that do input/output to arbitrary
4885objects using functions supplied by your program. This protocol is
4886discussed in @ref{Custom Streams}.
4887
4888@strong{Portability Note:} The facilities described in this section are
4889specific to GNU. Other systems or C implementations might or might not
4890provide equivalent functionality.
4891
4892@menu
19c3f208 4893* String Streams:: Streams that get data from or put data in
162ba701 4894 a string or memory buffer.
28f540f4 4895* Custom Streams:: Defining your own streams with an arbitrary
162ba701 4896 input data source and/or output data sink.
28f540f4
RM
4897@end menu
4898
4899@node String Streams
4900@subsection String Streams
4901
4902@cindex stream, for I/O to a string
4903@cindex string stream
4904The @code{fmemopen} and @code{open_memstream} functions allow you to do
4905I/O to a string or memory buffer. These facilities are declared in
4906@file{stdio.h}.
4907@pindex stdio.h
4908
28f540f4 4909@deftypefun {FILE *} fmemopen (void *@var{buf}, size_t @var{size}, const char *@var{opentype})
d08a7e4c 4910@standards{GNU, stdio.h}
171e9210
AO
4911@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
4912@c Unlike open_memstream, fmemopen does (indirectly) call _IO_link_in,
4913@c bringing with it additional potential for async trouble with
4914@c list_all_lock.
28f540f4
RM
4915This function opens a stream that allows the access specified by the
4916@var{opentype} argument, that reads from or writes to the buffer specified
4917by the argument @var{buf}. This array must be at least @var{size} bytes long.
4918
4919If you specify a null pointer as the @var{buf} argument, @code{fmemopen}
04b9968b
UD
4920dynamically allocates an array @var{size} bytes long (as with @code{malloc};
4921@pxref{Unconstrained Allocation}). This is really only useful
28f540f4
RM
4922if you are going to write things to the buffer and then read them back
4923in again, because you have no way of actually getting a pointer to the
4924buffer (for this, try @code{open_memstream}, below). The buffer is
417d6b34 4925freed when the stream is closed.
28f540f4
RM
4926
4927The argument @var{opentype} is the same as in @code{fopen}
8b7fb588 4928(@pxref{Opening Streams}). If the @var{opentype} specifies
28f540f4
RM
4929append mode, then the initial file position is set to the first null
4930character in the buffer. Otherwise the initial file position is at the
4931beginning of the buffer.
4932
4933When a stream open for writing is flushed or closed, a null character
4934(zero byte) is written at the end of the buffer if it fits. You
4935should add an extra byte to the @var{size} argument to account for this.
4936Attempts to write more than @var{size} bytes to the buffer result
4937in an error.
4938
4939For a stream open for reading, null characters (zero bytes) in the
4940buffer do not count as ``end of file''. Read operations indicate end of
4941file only when the file position advances past @var{size} bytes. So, if
4942you want to read characters from a null-terminated string, you should
4943supply the length of the string as the @var{size} argument.
4944@end deftypefun
4945
4946Here is an example of using @code{fmemopen} to create a stream for
4947reading from a string:
4948
4949@smallexample
4950@include memopen.c.texi
4951@end smallexample
4952
4953This program produces the following output:
4954
4955@smallexample
4956Got f
4957Got o
4958Got o
4959Got b
4960Got a
4961Got r
4962@end smallexample
4963
28f540f4 4964@deftypefun {FILE *} open_memstream (char **@var{ptr}, size_t *@var{sizeloc})
d08a7e4c 4965@standards{GNU, stdio.h}
171e9210 4966@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4 4967This function opens a stream for writing to a buffer. The buffer is
29402b12
RM
4968allocated dynamically and grown as necessary, using @code{malloc}.
4969After you've closed the stream, this buffer is your responsibility to
4970clean up using @code{free} or @code{realloc}. @xref{Unconstrained Allocation}.
28f540f4
RM
4971
4972When the stream is closed with @code{fclose} or flushed with
4973@code{fflush}, the locations @var{ptr} and @var{sizeloc} are updated to
4974contain the pointer to the buffer and its size. The values thus stored
4975remain valid only as long as no further output on the stream takes
4976place. If you do more output, you must flush the stream again to store
4977new values before you use them again.
4978
4979A null character is written at the end of the buffer. This null character
4980is @emph{not} included in the size value stored at @var{sizeloc}.
4981
a5a0310d
UD
4982You can move the stream's file position with @code{fseek} or
4983@code{fseeko} (@pxref{File Positioning}). Moving the file position past
4984the end of the data already written fills the intervening space with
4985zeroes.
28f540f4
RM
4986@end deftypefun
4987
4988Here is an example of using @code{open_memstream}:
4989
4990@smallexample
4991@include memstrm.c.texi
4992@end smallexample
4993
4994This program produces the following output:
4995
4996@smallexample
4997buf = `hello', size = 5
4998buf = `hello, world', size = 12
4999@end smallexample
5000
28f540f4
RM
5001@node Custom Streams
5002@subsection Programming Your Own Custom Streams
5003@cindex custom streams
5004@cindex programming your own streams
5005
5006This section describes how you can make a stream that gets input from an
5007arbitrary data source or writes output to an arbitrary data sink
52cea457
UD
5008programmed by you. We call these @dfn{custom streams}. The functions
5009and types described here are all GNU extensions.
28f540f4
RM
5010
5011@c !!! this does not talk at all about the higher-level hooks
5012
5013@menu
5014* Streams and Cookies:: The @dfn{cookie} records where to fetch or
162ba701 5015 store data that is read or written.
28f540f4 5016* Hook Functions:: How you should define the four @dfn{hook
162ba701 5017 functions} that a custom stream needs.
28f540f4
RM
5018@end menu
5019
5020@node Streams and Cookies
5021@subsubsection Custom Streams and Cookies
5022@cindex cookie, for custom stream
5023
5024Inside every custom stream is a special object called the @dfn{cookie}.
5025This is an object supplied by you which records where to fetch or store
5026the data read or written. It is up to you to define a data type to use
5027for the cookie. The stream functions in the library never refer
5028directly to its contents, and they don't even know what the type is;
5029they record its address with type @code{void *}.
5030
5031To implement a custom stream, you must specify @emph{how} to fetch or
5032store the data in the specified place. You do this by defining
5033@dfn{hook functions} to read, write, change ``file position'', and close
5034the stream. All four of these functions will be passed the stream's
5035cookie so they can tell where to fetch or store the data. The library
5036functions don't know what's inside the cookie, but your functions will
5037know.
5038
5039When you create a custom stream, you must specify the cookie pointer,
19c3f208 5040and also the four hook functions stored in a structure of type
28f540f4
RM
5041@code{cookie_io_functions_t}.
5042
5043These facilities are declared in @file{stdio.h}.
5044@pindex stdio.h
5045
28f540f4 5046@deftp {Data Type} {cookie_io_functions_t}
d08a7e4c 5047@standards{GNU, stdio.h}
19c3f208 5048This is a structure type that holds the functions that define the
28f540f4
RM
5049communications protocol between the stream and its cookie. It has
5050the following members:
5051
5052@table @code
5053@item cookie_read_function_t *read
5054This is the function that reads data from the cookie. If the value is a
f2ea0f5b 5055null pointer instead of a function, then read operations on this stream
28f540f4
RM
5056always return @code{EOF}.
5057
5058@item cookie_write_function_t *write
5059This is the function that writes data to the cookie. If the value is a
5060null pointer instead of a function, then data written to the stream is
5061discarded.
5062
5063@item cookie_seek_function_t *seek
5064This is the function that performs the equivalent of file positioning on
5065the cookie. If the value is a null pointer instead of a function, calls
a5a0310d
UD
5066to @code{fseek} or @code{fseeko} on this stream can only seek to
5067locations within the buffer; any attempt to seek outside the buffer will
5068return an @code{ESPIPE} error.
28f540f4
RM
5069
5070@item cookie_close_function_t *close
5071This function performs any appropriate cleanup on the cookie when
5072closing the stream. If the value is a null pointer instead of a
5073function, nothing special is done to close the cookie when the stream is
5074closed.
5075@end table
5076@end deftp
5077
28f540f4 5078@deftypefun {FILE *} fopencookie (void *@var{cookie}, const char *@var{opentype}, cookie_io_functions_t @var{io-functions})
d08a7e4c 5079@standards{GNU, stdio.h}
171e9210 5080@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
28f540f4
RM
5081This function actually creates the stream for communicating with the
5082@var{cookie} using the functions in the @var{io-functions} argument.
5083The @var{opentype} argument is interpreted as for @code{fopen};
5084see @ref{Opening Streams}. (But note that the ``truncate on
5085open'' option is ignored.) The new stream is fully buffered.
5086
5087The @code{fopencookie} function returns the newly created stream, or a null
5088pointer in case of an error.
5089@end deftypefun
5090
5091@node Hook Functions
5092@subsubsection Custom Stream Hook Functions
5093@cindex hook functions (of custom streams)
5094
5095Here are more details on how you should define the four hook functions
5096that a custom stream needs.
5097
5098You should define the function to read data from the cookie as:
5099
5100@smallexample
62ecda3d 5101ssize_t @var{reader} (void *@var{cookie}, char *@var{buffer}, size_t @var{size})
28f540f4
RM
5102@end smallexample
5103
5104This is very similar to the @code{read} function; see @ref{I/O
5105Primitives}. Your function should transfer up to @var{size} bytes into
5106the @var{buffer}, and return the number of bytes read, or zero to
5107indicate end-of-file. You can return a value of @code{-1} to indicate
5108an error.
5109
5110You should define the function to write data to the cookie as:
5111
5112@smallexample
62ecda3d 5113ssize_t @var{writer} (void *@var{cookie}, const char *@var{buffer}, size_t @var{size})
28f540f4
RM
5114@end smallexample
5115
5116This is very similar to the @code{write} function; see @ref{I/O
5117Primitives}. Your function should transfer up to @var{size} bytes from
5118the buffer, and return the number of bytes written. You can return a
247c3ede
PB
5119value of @code{0} to indicate an error. You must not return any
5120negative value.
28f540f4
RM
5121
5122You should define the function to perform seek operations on the cookie
5123as:
5124
5125@smallexample
c1e36819 5126int @var{seeker} (void *@var{cookie}, off64_t *@var{position}, int @var{whence})
28f540f4
RM
5127@end smallexample
5128
5129For this function, the @var{position} and @var{whence} arguments are
c1e36819 5130interpreted as for @code{fgetpos}; see @ref{Portable Positioning}.
28f540f4 5131
19c3f208 5132After doing the seek operation, your function should store the resulting
28f540f4
RM
5133file position relative to the beginning of the file in @var{position}.
5134Your function should return a value of @code{0} on success and @code{-1}
5135to indicate an error.
5136
5137You should define the function to do cleanup operations on the cookie
5138appropriate for closing the stream as:
5139
5140@smallexample
5141int @var{cleaner} (void *@var{cookie})
5142@end smallexample
5143
5144Your function should return @code{-1} to indicate an error, and @code{0}
5145otherwise.
5146
fff763a5 5147@deftp {Data Type} cookie_read_function_t
d08a7e4c 5148@standards{GNU, stdio.h}
28f540f4
RM
5149This is the data type that the read function for a custom stream should have.
5150If you declare the function as shown above, this is the type it will have.
5151@end deftp
5152
fff763a5 5153@deftp {Data Type} cookie_write_function_t
d08a7e4c 5154@standards{GNU, stdio.h}
28f540f4
RM
5155The data type of the write function for a custom stream.
5156@end deftp
5157
fff763a5 5158@deftp {Data Type} cookie_seek_function_t
d08a7e4c 5159@standards{GNU, stdio.h}
28f540f4
RM
5160The data type of the seek function for a custom stream.
5161@end deftp
5162
fff763a5 5163@deftp {Data Type} cookie_close_function_t
d08a7e4c 5164@standards{GNU, stdio.h}
28f540f4
RM
5165The data type of the close function for a custom stream.
5166@end deftp
5167
5168@ignore
5169Roland says:
5170
5171@quotation
5172There is another set of functions one can give a stream, the
5173input-room and output-room functions. These functions must
5174understand stdio internals. To describe how to use these
5175functions, you also need to document lots of how stdio works
5176internally (which isn't relevant for other uses of stdio).
5177Perhaps I can write an interface spec from which you can write
5178good documentation. But it's pretty complex and deals with lots
5179of nitty-gritty details. I think it might be better to let this
5180wait until the rest of the manual is more done and polished.
5181@end quotation
5182@end ignore
5183
5184@c ??? This section could use an example.
0501d603
UD
5185
5186
5187@node Formatted Messages
5188@section Formatted Messages
5189@cindex formatted messages
5190
5191On systems which are based on System V messages of programs (especially
5192the system tools) are printed in a strict form using the @code{fmtmsg}
5193function. The uniformity sometimes helps the user to interpret messages
cf29ffbe 5194and the strictness tests of the @code{fmtmsg} function ensure that the
0501d603
UD
5195programmer follows some minimal requirements.
5196
5197@menu
5198* Printing Formatted Messages:: The @code{fmtmsg} function.
5199* Adding Severity Classes:: Add more severity classes.
5200* Example:: How to use @code{fmtmsg} and @code{addseverity}.
5201@end menu
5202
5203
5204@node Printing Formatted Messages
5205@subsection Printing Formatted Messages
5206
5207Messages can be printed to standard error and/or to the console. To
cf29ffbe 5208select the destination the programmer can use the following two values,
0501d603
UD
5209bitwise OR combined if wanted, for the @var{classification} parameter of
5210@code{fmtmsg}:
5211
5212@vtable @code
5213@item MM_PRINT
5214Display the message in standard error.
5215@item MM_CONSOLE
5216Display the message on the system console.
5217@end vtable
5218
f2ea0f5b 5219The erroneous piece of the system can be signalled by exactly one of the
0501d603
UD
5220following values which also is bitwise ORed with the
5221@var{classification} parameter to @code{fmtmsg}:
5222
5223@vtable @code
5224@item MM_HARD
5225The source of the condition is some hardware.
5226@item MM_SOFT
5227The source of the condition is some software.
5228@item MM_FIRM
5229The source of the condition is some firmware.
5230@end vtable
5231
5232A third component of the @var{classification} parameter to @code{fmtmsg}
5233can describe the part of the system which detects the problem. This is
5234done by using exactly one of the following values:
5235
5236@vtable @code
5237@item MM_APPL
f2ea0f5b 5238The erroneous condition is detected by the application.
0501d603 5239@item MM_UTIL
f2ea0f5b 5240The erroneous condition is detected by a utility.
0501d603 5241@item MM_OPSYS
f2ea0f5b 5242The erroneous condition is detected by the operating system.
0501d603
UD
5243@end vtable
5244
5245A last component of @var{classification} can signal the results of this
5246message. Exactly one of the following values can be used:
5247
5248@vtable @code
5249@item MM_RECOVER
5250It is a recoverable error.
5251@item MM_NRECOV
5252It is a non-recoverable error.
5253@end vtable
5254
0501d603 5255@deftypefun int fmtmsg (long int @var{classification}, const char *@var{label}, int @var{severity}, const char *@var{text}, const char *@var{action}, const char *@var{tag})
d08a7e4c 5256@standards{XPG, fmtmsg.h}
171e9210 5257@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acsafe{}}
0501d603
UD
5258Display a message described by its parameters on the device(s) specified
5259in the @var{classification} parameter. The @var{label} parameter
5260identifies the source of the message. The string should consist of two
5261colon separated parts where the first part has not more than 10 and the
04b9968b 5262second part not more than 14 characters. The @var{text} parameter
f2ea0f5b 5263describes the condition of the error, the @var{action} parameter possible
0501d603
UD
5264steps to recover from the error and the @var{tag} parameter is a
5265reference to the online documentation where more information can be
5266found. It should contain the @var{label} value and a unique
5267identification number.
5268
cf29ffbe 5269Each of the parameters can be a special value which means this value
0501d603
UD
5270is to be omitted. The symbolic names for these values are:
5271
5272@vtable @code
5273@item MM_NULLLBL
5274Ignore @var{label} parameter.
5275@item MM_NULLSEV
5276Ignore @var{severity} parameter.
5277@item MM_NULLMC
5278Ignore @var{classification} parameter. This implies that nothing is
5279actually printed.
5280@item MM_NULLTXT
5281Ignore @var{text} parameter.
5282@item MM_NULLACT
5283Ignore @var{action} parameter.
5284@item MM_NULLTAG
5285Ignore @var{tag} parameter.
5286@end vtable
5287
cf29ffbe 5288There is another way certain fields can be omitted from the output to
0501d603 5289standard error. This is described below in the description of
0bc93a2f 5290environment variables influencing the behavior.
0501d603
UD
5291
5292The @var{severity} parameter can have one of the values in the following
5293table:
5294@cindex severity class
5295
5296@vtable @code
5297@item MM_NOSEV
5298Nothing is printed, this value is the same as @code{MM_NULLSEV}.
5299@item MM_HALT
5300This value is printed as @code{HALT}.
5301@item MM_ERROR
5302This value is printed as @code{ERROR}.
5303@item MM_WARNING
5304This value is printed as @code{WARNING}.
5305@item MM_INFO
5306This value is printed as @code{INFO}.
5307@end vtable
5308
5309The numeric value of these five macros are between @code{0} and
5310@code{4}. Using the environment variable @code{SEV_LEVEL} or using the
5311@code{addseverity} function one can add more severity levels with their
5312corresponding string to print. This is described below
5313(@pxref{Adding Severity Classes}).
5314
5315@noindent
5316If no parameter is ignored the output looks like this:
5317
5318@smallexample
5319@var{label}: @var{severity-string}: @var{text}
5320TO FIX: @var{action} @var{tag}
5321@end smallexample
5322
5323The colons, new line characters and the @code{TO FIX} string are
5324inserted if necessary, i.e., if the corresponding parameter is not
5325ignored.
5326
5327This function is specified in the X/Open Portability Guide. It is also
04b9968b 5328available on all systems derived from System V.
0501d603 5329
cf29ffbe 5330The function returns the value @code{MM_OK} if no error occurred. If
0501d603
UD
5331only the printing to standard error failed, it returns @code{MM_NOMSG}.
5332If printing to the console fails, it returns @code{MM_NOCON}. If
cf29ffbe 5333nothing is printed @code{MM_NOTOK} is returned. Among situations where
0501d603
UD
5334all outputs fail this last value is also returned if a parameter value
5335is incorrect.
5336@end deftypefun
5337
0bc93a2f 5338There are two environment variables which influence the behavior of
0501d603
UD
5339@code{fmtmsg}. The first is @code{MSGVERB}. It is used to control the
5340output actually happening on standard error (@emph{not} the console
04b9968b 5341output). Each of the five fields can explicitly be enabled. To do
0501d603 5342this the user has to put the @code{MSGVERB} variable with a format like
cf29ffbe 5343the following in the environment before calling the @code{fmtmsg} function
0501d603
UD
5344the first time:
5345
5346@smallexample
95fdc6a0 5347MSGVERB=@var{keyword}[:@var{keyword}[:@dots{}]]
0501d603
UD
5348@end smallexample
5349
5350Valid @var{keyword}s are @code{label}, @code{severity}, @code{text},
5351@code{action}, and @code{tag}. If the environment variable is not given
5352or is the empty string, a not supported keyword is given or the value is
5353somehow else invalid, no part of the message is masked out.
5354
0bc93a2f 5355The second environment variable which influences the behavior of
0501d603 5356@code{fmtmsg} is @code{SEV_LEVEL}. This variable and the change in the
0bc93a2f 5357behavior of @code{fmtmsg} is not specified in the X/Open Portability
0501d603 5358Guide. It is available in System V systems, though. It can be used to
cf29ffbe 5359introduce new severity levels. By default, only the five severity levels
0501d603
UD
5360described above are available. Any other numeric value would make
5361@code{fmtmsg} print nothing.
5362
5363If the user puts @code{SEV_LEVEL} with a format like
5364
5365@smallexample
95fdc6a0 5366SEV_LEVEL=[@var{description}[:@var{description}[:@dots{}]]]
0501d603
UD
5367@end smallexample
5368
5369@noindent
5370in the environment of the process before the first call to
5371@code{fmtmsg}, where @var{description} has a value of the form
5372
5373@smallexample
5374@var{severity-keyword},@var{level},@var{printstring}
5375@end smallexample
5376
5377The @var{severity-keyword} part is not used by @code{fmtmsg} but it has
5378to be present. The @var{level} part is a string representation of a
5379number. The numeric value must be a number greater than 4. This value
5380must be used in the @var{severity} parameter of @code{fmtmsg} to select
5381this class. It is not possible to overwrite any of the predefined
5382classes. The @var{printstring} is the string printed when a message of
5383this class is processed by @code{fmtmsg} (see above, @code{fmtsmg} does
5384not print the numeric value but instead the string representation).
5385
5386
5387@node Adding Severity Classes
5388@subsection Adding Severity Classes
5389@cindex severity class
5390
04b9968b 5391There is another possibility to introduce severity classes besides using
0501d603
UD
5392the environment variable @code{SEV_LEVEL}. This simplifies the task of
5393introducing new classes in a running program. One could use the
5394@code{setenv} or @code{putenv} function to set the environment variable,
cf29ffbe 5395but this is toilsome.
0501d603
UD
5396
5397@deftypefun int addseverity (int @var{severity}, const char *@var{string})
171e9210 5398@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
04b9968b 5399This function allows the introduction of new severity classes which can be
0501d603
UD
5400addressed by the @var{severity} parameter of the @code{fmtmsg} function.
5401The @var{severity} parameter of @code{addseverity} must match the value
04b9968b 5402for the parameter with the same name of @code{fmtmsg}, and @var{string}
0501d603
UD
5403is the string printed in the actual messages instead of the numeric
5404value.
5405
5406If @var{string} is @code{NULL} the severity class with the numeric value
5407according to @var{severity} is removed.
5408
cf29ffbe
UD
5409It is not possible to overwrite or remove one of the default severity
5410classes. All calls to @code{addseverity} with @var{severity} set to one
5411of the values for the default classes will fail.
5412
0501d603
UD
5413The return value is @code{MM_OK} if the task was successfully performed.
5414If the return value is @code{MM_NOTOK} something went wrong. This could
5415mean that no more memory is available or a class is not available when
5416it has to be removed.
5417
5418This function is not specified in the X/Open Portability Guide although
cf29ffbe 5419the @code{fmtsmg} function is. It is available on System V systems.
0501d603
UD
5420@end deftypefun
5421
5422
5423@node Example
5424@subsection How to use @code{fmtmsg} and @code{addseverity}
5425
c703cd7a 5426Here is a simple example program to illustrate the use of both
0501d603
UD
5427functions described in this section.
5428
5429@smallexample
5430@include fmtmsgexpl.c.texi
5431@end smallexample
5432
04b9968b
UD
5433The second call to @code{fmtmsg} illustrates a use of this function as
5434it usually occurs on System V systems, which heavily use this function.
5435It seems worthwhile to give a short explanation here of how this system
5436works on System V. The value of the
0bc93a2f 5437@var{label} field (@code{UX:cat}) says that the error occurred in the
0501d603
UD
5438Unix program @code{cat}. The explanation of the error follows and the
5439value for the @var{action} parameter is @code{"refer to manual"}. One
04b9968b 5440could be more specific here, if necessary. The @var{tag} field contains,
0501d603
UD
5441as proposed above, the value of the string given for the @var{label}
5442parameter, and additionally a unique ID (@code{001} in this case). For
5443a GNU environment this string could contain a reference to the
5444corresponding node in the Info page for the program.
5445
5446@noindent
5447Running this program without specifying the @code{MSGVERB} and
5448@code{SEV_LEVEL} function produces the following output:
5449
5450@smallexample
5451UX:cat: NOTE2: invalid syntax
5452TO FIX: refer to manual UX:cat:001
5453@end smallexample
5454
5455We see the different fields of the message and how the extra glue (the
c703cd7a 5456colons and the @code{TO FIX} string) is printed. But only one of the
0501d603
UD
5457three calls to @code{fmtmsg} produced output. The first call does not
5458print anything because the @var{label} parameter is not in the correct
8b7fb588
UD
5459form. The string must contain two fields, separated by a colon
5460(@pxref{Printing Formatted Messages}). The third @code{fmtmsg} call
0501d603
UD
5461produced no output since the class with the numeric value @code{6} is
5462not defined. Although a class with numeric value @code{5} is also not
04b9968b 5463defined by default, the call to @code{addseverity} introduces it and
0ea554bf 5464the second call to @code{fmtmsg} produces the above output.
0501d603
UD
5465
5466When we change the environment of the program to contain
5467@code{SEV_LEVEL=XXX,6,NOTE} when running it we get a different result:
5468
5469@smallexample
5470UX:cat: NOTE2: invalid syntax
5471TO FIX: refer to manual UX:cat:001
5472label:foo: NOTE: text
5473TO FIX: action tag
5474@end smallexample
5475
04b9968b 5476Now the third call to @code{fmtmsg} produced some output and we see how
0501d603
UD
5477the string @code{NOTE} from the environment variable appears in the
5478message.
5479
04b9968b 5480Now we can reduce the output by specifying which fields we are
0501d603
UD
5481interested in. If we additionally set the environment variable
5482@code{MSGVERB} to the value @code{severity:label:action} we get the
5483following output:
5484
5485@smallexample
5486UX:cat: NOTE2
5487TO FIX: refer to manual
5488label:foo: NOTE
5489TO FIX: action
5490@end smallexample
5491
5492@noindent
5493I.e., the output produced by the @var{text} and the @var{tag} parameters
cf29ffbe 5494to @code{fmtmsg} vanished. Please also note that now there is no colon
0501d603 5495after the @code{NOTE} and @code{NOTE2} strings in the output. This is
04b9968b 5496not necessary since there is no more output on this line because the text
0501d603 5497is missing.