]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/stdio.texi
Add missing percent sign to conversion specifier
[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
7e8989d0
MS
2965nothing similar. When using the GNU C compiler or any other compiler
2966that interprets calls to standard I/O functions according to the rules
2967of the language standard it is necessary to disable such handling by
2968the appropriate compiler option. Otherwise the behavior of a program
2969that relies on the extension is undefined.
28f540f4
RM
2970
2971@node Registering New Conversions
2972@subsection Registering New Conversions
2973
2974The function to register a new output conversion is
2975@code{register_printf_function}, declared in @file{printf.h}.
2976@pindex printf.h
2977
28f540f4 2978@deftypefun int register_printf_function (int @var{spec}, printf_function @var{handler-function}, printf_arginfo_function @var{arginfo-function})
d08a7e4c 2979@standards{GNU, printf.h}
171e9210
AO
2980@safety{@prelim{}@mtunsafe{@mtasuconst{:printfext}}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
2981@c This function is guarded by the global non-recursive libc lock, but
2982@c users of the variables it sets aren't, and those should be MT-Safe,
2983@c so we're ruling out the use of this extension with threads. Calling
2984@c it from a signal handler may self-deadlock, and cancellation may
2985@c leave the lock held, besides leaking allocated memory.
28f540f4 2986This function defines the conversion specifier character @var{spec}.
42be70d4 2987Thus, if @var{spec} is @code{'Y'}, it defines the conversion @samp{%Y}.
28f540f4
RM
2988You can redefine the built-in conversions like @samp{%s}, but flag
2989characters like @samp{#} and type modifiers like @samp{l} can never be
2990used as conversions; calling @code{register_printf_function} for those
42be70d4
UD
2991characters has no effect. It is advisable not to use lowercase letters,
2992since the ISO C standard warns that additional lowercase letters may be
2993standardized in future editions of the standard.
28f540f4
RM
2994
2995The @var{handler-function} is the function called by @code{printf} and
2996friends when this conversion appears in a template string.
2997@xref{Defining the Output Handler}, for information about how to define
2998a function to pass as this argument. If you specify a null pointer, any
2999existing handler function for @var{spec} is removed.
3000
3001The @var{arginfo-function} is the function called by
3002@code{parse_printf_format} when this conversion appears in a
3003template string. @xref{Parsing a Template String}, for information
3004about this.
3005
54d79e99
UD
3006@c The following is not true anymore. The `parse_printf_format' function
3007@c is now also called from `vfprintf' via `parse_one_spec'.
3008@c --drepper@gnu, 1996/11/14
3009@c
3010@c Normally, you install both functions for a conversion at the same time,
3011@c but if you are never going to call @code{parse_printf_format}, you do
3012@c not need to define an arginfo function.
3013
1f77f049 3014@strong{Attention:} In @theglibc{} versions before 2.0 the
54d79e99 3015@var{arginfo-function} function did not need to be installed unless
04b9968b 3016the user used the @code{parse_printf_format} function. This has changed.
54d79e99
UD
3017Now a call to any of the @code{printf} functions will call this
3018function when this format specifier appears in the format string.
28f540f4
RM
3019
3020The return value is @code{0} on success, and @code{-1} on failure
3021(which occurs if @var{spec} is out of range).
3022
7e8989d0
MS
3023@strong{Portability Note:} It is possible to redefine the standard output
3024conversions but doing so is strongly discouraged because it may interfere
3025with the behavior of programs and compiler implementations that assume
3026the effects of the conversions conform to the relevant language standards.
3027In addition, conforming compilers need not guarantee that the function
3028registered for a standard conversion will be called for each such
3029conversion in every format string in a program.
28f540f4
RM
3030@end deftypefun
3031
3032@node Conversion Specifier Options
3033@subsection Conversion Specifier Options
3034
40deae08
RM
3035If you define a meaning for @samp{%A}, what if the template contains
3036@samp{%+23A} or @samp{%-#A}? To implement a sensible meaning for these,
28f540f4
RM
3037the handler when called needs to be able to get the options specified in
3038the template.
3039
838e5ffe
UD
3040Both the @var{handler-function} and @var{arginfo-function} accept an
3041argument that points to a @code{struct printf_info}, which contains
3042information about the options appearing in an instance of the conversion
3043specifier. This data type is declared in the header file
3044@file{printf.h}.
28f540f4
RM
3045@pindex printf.h
3046
28f540f4 3047@deftp {Type} {struct printf_info}
d08a7e4c 3048@standards{GNU, printf.h}
28f540f4
RM
3049This structure is used to pass information about the options appearing
3050in an instance of a conversion specifier in a @code{printf} template
3051string to the handler and arginfo functions for that specifier. It
3052contains the following members:
3053
3054@table @code
3055@item int prec
3056This is the precision specified. The value is @code{-1} if no precision
3057was specified. If the precision 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
3063@item int width
3064This is the minimum field width specified. The value is @code{0} if no
3065width was specified. If the field width was given as @samp{*}, the
3066@code{printf_info} structure passed to the handler function contains the
3067actual value retrieved from the argument list. But the structure passed
3068to the arginfo function contains a value of @code{INT_MIN}, since the
3069actual value is not known.
3070
54d79e99 3071@item wchar_t spec
28f540f4
RM
3072This is the conversion specifier character specified. It's stored in
3073the structure so that you can register the same handler function for
3074multiple characters, but still have a way to tell them apart when the
3075handler function is called.
3076
3077@item unsigned int is_long_double
3078This is a boolean that is true if the @samp{L}, @samp{ll}, or @samp{q}
3079type modifier was specified. For integer conversions, this indicates
3080@code{long long int}, as opposed to @code{long double} for floating
3081point conversions.
3082
d64b6ad0
UD
3083@item unsigned int is_char
3084This is a boolean that is true if the @samp{hh} type modifier was specified.
3085
28f540f4
RM
3086@item unsigned int is_short
3087This is a boolean that is true if the @samp{h} type modifier was specified.
3088
3089@item unsigned int is_long
3090This is a boolean that is true if the @samp{l} type modifier was specified.
3091
3092@item unsigned int alt
3093This is a boolean that is true if the @samp{#} flag was specified.
3094
3095@item unsigned int space
3096This is a boolean that is true if the @samp{ } flag was specified.
3097
3098@item unsigned int left
3099This is a boolean that is true if the @samp{-} flag was specified.
3100
3101@item unsigned int showsign
3102This is a boolean that is true if the @samp{+} flag was specified.
3103
3104@item unsigned int group
3105This is a boolean that is true if the @samp{'} flag was specified.
3106
54d79e99
UD
3107@item unsigned int extra
3108This flag has a special meaning depending on the context. It could
3109be used freely by the user-defined handlers but when called from
3110the @code{printf} function this variable always contains the value
3111@code{0}.
3112
d64b6ad0
UD
3113@item unsigned int wide
3114This flag is set if the stream is wide oriented.
3115
54d79e99 3116@item wchar_t pad
28f540f4
RM
3117This is the character to use for padding the output to the minimum field
3118width. The value is @code{'0'} if the @samp{0} flag was specified, and
3119@code{' '} otherwise.
3120@end table
3121@end deftp
3122
3123
3124@node Defining the Output Handler
3125@subsection Defining the Output Handler
3126
3127Now let's look at how to define the handler and arginfo functions
3128which are passed as arguments to @code{register_printf_function}.
3129
1f77f049 3130@strong{Compatibility Note:} The interface changed in @theglibc{}
54d79e99
UD
3131version 2.0. Previously the third argument was of type
3132@code{va_list *}.
3133
28f540f4
RM
3134You should define your handler functions with a prototype like:
3135
3136@smallexample
3137int @var{function} (FILE *stream, const struct printf_info *info,
162ba701 3138 const void *const *args)
28f540f4
RM
3139@end smallexample
3140
54d79e99 3141The @var{stream} argument passed to the handler function is the stream to
28f540f4
RM
3142which it should write output.
3143
54d79e99 3144The @var{info} argument is a pointer to a structure that contains
28f540f4
RM
3145information about the various options that were included with the
3146conversion in the template string. You should not modify this structure
3147inside your handler function. @xref{Conversion Specifier Options}, for
3148a description of this data structure.
3149
54d79e99
UD
3150@c The following changes some time back. --drepper@gnu, 1996/11/14
3151@c
3152@c The @code{ap_pointer} argument is used to pass the tail of the variable
3153@c argument list containing the values to be printed to your handler.
3154@c Unlike most other functions that can be passed an explicit variable
3155@c argument list, this is a @emph{pointer} to a @code{va_list}, rather than
3156@c the @code{va_list} itself. Thus, you should fetch arguments by
3157@c means of @code{va_arg (*ap_pointer, @var{type})}.
3158@c
3159@c (Passing a pointer here allows the function that calls your handler
3160@c function to update its own @code{va_list} variable to account for the
3161@c arguments that your handler processes. @xref{Variadic Functions}.)
3162
3163The @var{args} is a vector of pointers to the arguments data.
04b9968b 3164The number of arguments was determined by calling the argument
54d79e99 3165information function provided by the user.
28f540f4
RM
3166
3167Your handler function should return a value just like @code{printf}
3168does: it should return the number of characters it has written, or a
3169negative value to indicate an error.
3170
28f540f4 3171@deftp {Data Type} printf_function
d08a7e4c 3172@standards{GNU, printf.h}
28f540f4
RM
3173This is the data type that a handler function should have.
3174@end deftp
3175
3176If you are going to use @w{@code{parse_printf_format}} in your
54d79e99 3177application, you must also define a function to pass as the
28f540f4 3178@var{arginfo-function} argument for each new conversion you install with
19c3f208 3179@code{register_printf_function}.
28f540f4 3180
54d79e99 3181You have to define these functions with a prototype like:
28f540f4
RM
3182
3183@smallexample
3184int @var{function} (const struct printf_info *info,
162ba701 3185 size_t n, int *argtypes)
28f540f4
RM
3186@end smallexample
3187
3188The return value from the function should be the number of arguments the
3189conversion expects. The function should also fill in no more than
3190@var{n} elements of the @var{argtypes} array with information about the
3191types of each of these arguments. This information is encoded using the
3192various @samp{PA_} macros. (You will notice that this is the same
3193calling convention @code{parse_printf_format} itself uses.)
3194
28f540f4 3195@deftp {Data Type} printf_arginfo_function
d08a7e4c 3196@standards{GNU, printf.h}
28f540f4
RM
3197This type is used to describe functions that return information about
3198the number and type of arguments used by a conversion specifier.
3199@end deftp
3200
3201@node Printf Extension Example
3202@subsection @code{printf} Extension Example
3203
3204Here is an example showing how to define a @code{printf} handler function.
19c3f208 3205This program defines a data structure called a @code{Widget} and
28f540f4
RM
3206defines the @samp{%W} conversion to print information about @w{@code{Widget *}}
3207arguments, including the pointer value and the name stored in the data
3208structure. The @samp{%W} conversion supports the minimum field width and
3209left-justification options, but ignores everything else.
3210
3211@smallexample
3212@include rprintf.c.texi
3213@end smallexample
3214
3215The output produced by this program looks like:
3216
3217@smallexample
3218|<Widget 0xffeffb7c: mywidget>|
3219| <Widget 0xffeffb7c: mywidget>|
3220|<Widget 0xffeffb7c: mywidget> |
3221@end smallexample
3222
29bb8719
UD
3223@node Predefined Printf Handlers
3224@subsection Predefined @code{printf} Handlers
3225
1f77f049 3226@Theglibc{} also contains a concrete and useful application of the
29bb8719
UD
3227@code{printf} handler extension. There are two functions available
3228which implement a special way to print floating-point numbers.
3229
29bb8719 3230@deftypefun int printf_size (FILE *@var{fp}, const struct printf_info *@var{info}, const void *const *@var{args})
d08a7e4c 3231@standards{GNU, printf.h}
171e9210
AO
3232@safety{@prelim{}@mtsafe{@mtsrace{:fp} @mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @acucorrupt{}}}
3233@c This is meant to be called by vfprintf, that should hold the lock on
3234@c the stream, but if this function is called directly, output will be
3235@c racy, besides the uses of the global locale object while other
3236@c threads may be changing it and the possbility of leaving the stream
3237@c object in an inconsistent state in case of cancellation.
29bb8719
UD
3238Print a given floating point number as for the format @code{%f} except
3239that there is a postfix character indicating the divisor for the
3240number to make this less than 1000. There are two possible divisors:
04b9968b 3241powers of 1024 or powers of 1000. Which one is used depends on the
29bb8719
UD
3242format character specified while registered this handler. If the
3243character is of lower case, 1024 is used. For upper case characters,
32441000 is used.
3245
3246The postfix tag corresponds to bytes, kilobytes, megabytes, gigabytes,
3247etc. The full table is:
3248
779ae82e 3249@ifinfo
029264d1 3250@multitable {' '} {2^10 (1024)} {zetta} {Upper} {10^24 (1000)}
29bb8719
UD
3251@item low @tab Multiplier @tab From @tab Upper @tab Multiplier
3252@item ' ' @tab 1 @tab @tab ' ' @tab 1
3253@item k @tab 2^10 (1024) @tab kilo @tab K @tab 10^3 (1000)
3254@item m @tab 2^20 @tab mega @tab M @tab 10^6
3255@item g @tab 2^30 @tab giga @tab G @tab 10^9
3256@item t @tab 2^40 @tab tera @tab T @tab 10^12
3257@item p @tab 2^50 @tab peta @tab P @tab 10^15
3258@item e @tab 2^60 @tab exa @tab E @tab 10^18
3259@item z @tab 2^70 @tab zetta @tab Z @tab 10^21
3260@item y @tab 2^80 @tab yotta @tab Y @tab 10^24
3261@end multitable
779ae82e
UD
3262@end ifinfo
3263@iftex
3264@tex
3265\hbox to\hsize{\hfil\vbox{\offinterlineskip
3266\hrule
3267\halign{\strut#& \vrule#\tabskip=1em plus2em& {\tt#}\hfil& \vrule#& #\hfil& \vrule#& #\hfil& \vrule#& {\tt#}\hfil& \vrule#& #\hfil& \vrule#\tabskip=0pt\cr
3268\noalign{\hrule}
3269\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
3270&& \omit low && Multiplier && From && \omit Upper && Multiplier &\cr
3271\omit&height2pt&\omit&&\omit&&\omit&&\omit&&\omit&\cr
3272\noalign{\hrule}
3273&& {\tt\char32} && 1 && && {\tt\char32} && 1 &\cr
3274&& k && $2^{10} = 1024$ && kilo && K && $10^3 = 1000$ &\cr
3275&& m && $2^{20}$ && mega && M && $10^6$ &\cr
3276&& g && $2^{30}$ && giga && G && $10^9$ &\cr
3277&& t && $2^{40}$ && tera && T && $10^{12}$ &\cr
3278&& p && $2^{50}$ && peta && P && $10^{15}$ &\cr
3279&& e && $2^{60}$ && exa && E && $10^{18}$ &\cr
3280&& z && $2^{70}$ && zetta && Z && $10^{21}$ &\cr
3281&& y && $2^{80}$ && yotta && Y && $10^{24}$ &\cr
3282\noalign{\hrule}}}\hfil}
3283@end tex
3284@end iftex
29bb8719
UD
3285
3286The default precision is 3, i.e., 1024 is printed with a lower-case
3287format character as if it were @code{%.3fk} and will yield @code{1.000k}.
3288@end deftypefun
3289
3290Due to the requirements of @code{register_printf_function} we must also
04b9968b 3291provide the function which returns information about the arguments.
29bb8719 3292
29bb8719 3293@deftypefun int printf_size_info (const struct printf_info *@var{info}, size_t @var{n}, int *@var{argtypes})
d08a7e4c 3294@standards{GNU, printf.h}
171e9210 3295@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
29bb8719
UD
3296This function will return in @var{argtypes} the information about the
3297used parameters in the way the @code{vfprintf} implementation expects
3298it. The format always takes one argument.
3299@end deftypefun
3300
3301To use these functions both functions must be registered with a call like
3302
3303@smallexample
3304register_printf_function ('B', printf_size, printf_size_info);
3305@end smallexample
3306
3307Here we register the functions to print numbers as powers of 1000 since
f2ea0f5b 3308the format character @code{'B'} is an upper-case character. If we
29bb8719
UD
3309would additionally use @code{'b'} in a line like
3310
3311@smallexample
3312register_printf_function ('b', printf_size, printf_size_info);
3313@end smallexample
3314
3315@noindent
04b9968b
UD
3316we could also print using a power of 1024. Please note that all that is
3317different in these two lines is the format specifier. The
3318@code{printf_size} function knows about the difference between lower and upper
29bb8719
UD
3319case format specifiers.
3320
3321The use of @code{'B'} and @code{'b'} is no coincidence. Rather it is
3322the preferred way to use this functionality since it is available on
04b9968b 3323some other systems which also use format specifiers.
29bb8719 3324
28f540f4
RM
3325@node Formatted Input
3326@section Formatted Input
3327
3328@cindex formatted input from a stream
3329@cindex reading from a stream, formatted
3330@cindex format string, for @code{scanf}
3331@cindex template, for @code{scanf}
3332The functions described in this section (@code{scanf} and related
3333functions) provide facilities for formatted input analogous to the
3334formatted output facilities. These functions provide a mechanism for
3335reading arbitrary values under the control of a @dfn{format string} or
3336@dfn{template string}.
3337
3338@menu
3339* Formatted Input Basics:: Some basics to get you started.
3340* Input Conversion Syntax:: Syntax of conversion specifications.
3341* Table of Input Conversions:: Summary of input conversions and what they do.
3342* Numeric Input Conversions:: Details of conversions for reading numbers.
3343* String Input Conversions:: Details of conversions for reading strings.
3344* Dynamic String Input:: String conversions that @code{malloc} the buffer.
3345* Other Input Conversions:: Details of miscellaneous other conversions.
3346* Formatted Input Functions:: Descriptions of the actual functions.
3347* Variable Arguments Input:: @code{vscanf} and friends.
3348@end menu
3349
3350@node Formatted Input Basics
3351@subsection Formatted Input Basics
3352
3353Calls to @code{scanf} are superficially similar to calls to
3354@code{printf} in that arbitrary arguments are read under the control of
3355a template string. While the syntax of the conversion specifications in
3356the template is very similar to that for @code{printf}, the
3357interpretation of the template is oriented more towards free-format
3358input and simple pattern matching, rather than fixed-field formatting.
3359For example, most @code{scanf} conversions skip over any amount of
3360``white space'' (including spaces, tabs, and newlines) in the input
3361file, and there is no concept of precision for the numeric input
3362conversions as there is for the corresponding output conversions.
3363Ordinarily, non-whitespace characters in the template are expected to
3364match characters in the input stream exactly, but a matching failure is
3365distinct from an input error on the stream.
3366@cindex conversion specifications (@code{scanf})
3367
3368Another area of difference between @code{scanf} and @code{printf} is
3369that you must remember to supply pointers rather than immediate values
3370as the optional arguments to @code{scanf}; the values that are read are
3371stored in the objects that the pointers point to. Even experienced
3372programmers tend to forget this occasionally, so if your program is
3373getting strange errors that seem to be related to @code{scanf}, you
3374might want to double-check this.
3375
3376When a @dfn{matching failure} occurs, @code{scanf} returns immediately,
3377leaving the first non-matching character as the next character to be
3378read from the stream. The normal return value from @code{scanf} is the
3379number of values that were assigned, so you can use this to determine if
3380a matching error happened before all the expected values were read.
3381@cindex matching failure, in @code{scanf}
3382
3383The @code{scanf} function is typically used for things like reading in
3384the contents of tables. For example, here is a function that uses
3385@code{scanf} to initialize an array of @code{double}:
3386
3387@smallexample
3388void
3389readarray (double *array, int n)
3390@{
3391 int i;
3392 for (i=0; i<n; i++)
3393 if (scanf (" %lf", &(array[i])) != 1)
3394 invalid_input_error ();
3395@}
3396@end smallexample
3397
3398The formatted input functions are not used as frequently as the
3399formatted output functions. Partly, this is because it takes some care
3400to use them properly. Another reason is that it is difficult to recover
3401from a matching error.
3402
3403If you are trying to read input that doesn't match a single, fixed
3404pattern, you may be better off using a tool such as Flex to generate a
3405lexical scanner, or Bison to generate a parser, rather than using
9f508673
UD
3406@code{scanf}. For more information about these tools, see @ref{Top, , ,
3407flex.info, Flex: The Lexical Scanner Generator}, and @ref{Top, , ,
28f540f4
RM
3408bison.info, The Bison Reference Manual}.
3409
3410@node Input Conversion Syntax
3411@subsection Input Conversion Syntax
3412
3413A @code{scanf} template string is a string that contains ordinary
3414multibyte characters interspersed with conversion specifications that
3415start with @samp{%}.
3416
3417Any whitespace character (as defined by the @code{isspace} function;
3418@pxref{Classification of Characters}) in the template causes any number
3419of whitespace characters in the input stream to be read and discarded.
3420The whitespace characters that are matched need not be exactly the same
3421whitespace characters that appear in the template string. For example,
3422write @samp{ , } in the template to recognize a comma with optional
3423whitespace before and after.
3424
3425Other characters in the template string that are not part of conversion
3426specifications must match characters in the input stream exactly; if
3427this is not the case, a matching failure occurs.
3428
3429The conversion specifications in a @code{scanf} template string
3430have the general form:
3431
3432@smallexample
3433% @var{flags} @var{width} @var{type} @var{conversion}
3434@end smallexample
3435
3436In more detail, an input conversion specification consists of an initial
3437@samp{%} character followed in sequence by:
3438
3439@itemize @bullet
3440@item
3441An optional @dfn{flag character} @samp{*}, which says to ignore the text
3442read for this specification. When @code{scanf} finds a conversion
3443specification that uses this flag, it reads input as directed by the
3444rest of the conversion specification, but it discards this input, does
3445not use a pointer argument, and does not increment the count of
3446successful assignments.
3447@cindex flag character (@code{scanf})
3448
3449@item
3450An optional flag character @samp{a} (valid with string conversions only)
3451which requests allocation of a buffer long enough to store the string in.
3452(This is a GNU extension.)
3453@xref{Dynamic String Input}.
3454
3455@item
3456An optional decimal integer that specifies the @dfn{maximum field
3457width}. Reading of characters from the input stream stops either when
3458this maximum is reached or when a non-matching character is found,
3459whichever happens first. Most conversions discard initial whitespace
3460characters (those that don't are explicitly documented), and these
3461discarded characters don't count towards the maximum field width.
3462String input conversions store a null character to mark the end of the
3463input; the maximum field width does not include this terminator.
3464@cindex maximum field width (@code{scanf})
3465
3466@item
3467An optional @dfn{type modifier character}. For example, you can
3468specify a type modifier of @samp{l} with integer conversions such as
3469@samp{%d} to specify that the argument is a pointer to a @code{long int}
3470rather than a pointer to an @code{int}.
3471@cindex type modifier character (@code{scanf})
3472
3473@item
3474A character that specifies the conversion to be applied.
3475@end itemize
3476
19c3f208 3477The exact options that are permitted and how they are interpreted vary
28f540f4
RM
3478between the different conversion specifiers. See the descriptions of the
3479individual conversions for information about the particular options that
3480they allow.
3481
3482With the @samp{-Wformat} option, the GNU C compiler checks calls to
3483@code{scanf} and related functions. It examines the format string and
3484verifies that the correct number and types of arguments are supplied.
3485There is also a GNU C syntax to tell the compiler that a function you
19c3f208 3486write uses a @code{scanf}-style format string.
28f540f4 3487@xref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 3488gcc, Using GNU CC}, for more information.
28f540f4
RM
3489
3490@node Table of Input Conversions
3491@subsection Table of Input Conversions
3492@cindex input conversions, for @code{scanf}
3493
3494Here is a table that summarizes the various conversion specifications:
3495
3496@table @asis
3497@item @samp{%d}
3498Matches an optionally signed integer written in decimal. @xref{Numeric
3499Input Conversions}.
3500
3501@item @samp{%i}
3502Matches an optionally signed integer in any of the formats that the C
3503language defines for specifying an integer constant. @xref{Numeric
3504Input Conversions}.
3505
3506@item @samp{%o}
3507Matches an unsigned integer written in octal radix.
3508@xref{Numeric Input Conversions}.
3509
3510@item @samp{%u}
3511Matches an unsigned integer written in decimal radix.
3512@xref{Numeric Input Conversions}.
3513
3514@item @samp{%x}, @samp{%X}
3515Matches an unsigned integer written in hexadecimal radix.
3516@xref{Numeric Input Conversions}.
3517
3518@item @samp{%e}, @samp{%f}, @samp{%g}, @samp{%E}, @samp{%G}
3519Matches an optionally signed floating-point number. @xref{Numeric Input
3520Conversions}.
3521
3522@item @samp{%s}
b5e73f56 3523
28f540f4 3524Matches a string containing only non-whitespace characters.
b5e73f56
UD
3525@xref{String Input Conversions}. The presence of the @samp{l} modifier
3526determines whether the output is stored as a wide character string or a
3527multibyte string. If @samp{%s} is used in a wide character function the
3528string is converted as with multiple calls to @code{wcrtomb} into a
3529multibyte string. This means that the buffer must provide room for
3530@code{MB_CUR_MAX} bytes for each wide character read. In case
3531@samp{%ls} is used in a multibyte function the result is converted into
3532wide characters as with multiple calls of @code{mbrtowc} before being
3533stored in the user provided buffer.
3534
3535@item @samp{%S}
3536This is an alias for @samp{%ls} which is supported for compatibility
3537with the Unix standard.
28f540f4
RM
3538
3539@item @samp{%[}
3540Matches a string of characters that belong to a specified set.
b5e73f56
UD
3541@xref{String Input Conversions}. The presence of the @samp{l} modifier
3542determines whether the output is stored as a wide character string or a
3543multibyte string. If @samp{%[} is used in a wide character function the
3544string is converted as with multiple calls to @code{wcrtomb} into a
3545multibyte string. This means that the buffer must provide room for
3546@code{MB_CUR_MAX} bytes for each wide character read. In case
3547@samp{%l[} is used in a multibyte function the result is converted into
3548wide characters as with multiple calls of @code{mbrtowc} before being
3549stored in the user provided buffer.
28f540f4
RM
3550
3551@item @samp{%c}
3552Matches a string of one or more characters; the number of characters
3553read is controlled by the maximum field width given for the conversion.
3554@xref{String Input Conversions}.
3555
c703cd7a 3556If @samp{%c} is used in a wide stream function the read value is
b5e73f56
UD
3557converted from a wide character to the corresponding multibyte character
3558before storing it. Note that this conversion can produce more than one
c703cd7a 3559byte of output and therefore the provided buffer must be large enough for up
b5e73f56
UD
3560to @code{MB_CUR_MAX} bytes for each character. If @samp{%lc} is used in
3561a multibyte function the input is treated as a multibyte sequence (and
3562not bytes) and the result is converted as with calls to @code{mbrtowc}.
3563
3564@item @samp{%C}
3565This is an alias for @samp{%lc} which is supported for compatibility
3566with the Unix standard.
3567
28f540f4
RM
3568@item @samp{%p}
3569Matches a pointer value in the same implementation-defined format used
3570by the @samp{%p} output conversion for @code{printf}. @xref{Other Input
3571Conversions}.
3572
3573@item @samp{%n}
3574This conversion doesn't read any characters; it records the number of
3575characters read so far by this call. @xref{Other Input Conversions}.
3576
3577@item @samp{%%}
3578This matches a literal @samp{%} character in the input stream. No
3579corresponding argument is used. @xref{Other Input Conversions}.
3580@end table
3581
3582If the syntax of a conversion specification is invalid, the behavior is
3583undefined. If there aren't enough function arguments provided to supply
3584addresses for all the conversion specifications in the template strings
3585that perform assignments, or if the arguments are not of the correct
3586types, the behavior is also undefined. On the other hand, extra
3587arguments are simply ignored.
3588
3589@node Numeric Input Conversions
3590@subsection Numeric Input Conversions
3591
3592This section describes the @code{scanf} conversions for reading numeric
3593values.
3594
3595The @samp{%d} conversion matches an optionally signed integer in decimal
3596radix. The syntax that is recognized is the same as that for the
3597@code{strtol} function (@pxref{Parsing of Integers}) with the value
3598@code{10} for the @var{base} argument.
3599
3600The @samp{%i} conversion matches an optionally signed integer in any of
3601the formats that the C language defines for specifying an integer
3602constant. The syntax that is recognized is the same as that for the
3603@code{strtol} function (@pxref{Parsing of Integers}) with the value
3604@code{0} for the @var{base} argument. (You can print integers in this
3605syntax with @code{printf} by using the @samp{#} flag character with the
3606@samp{%x}, @samp{%o}, or @samp{%d} conversion. @xref{Integer Conversions}.)
3607
3608For example, any of the strings @samp{10}, @samp{0xa}, or @samp{012}
3609could be read in as integers under the @samp{%i} conversion. Each of
3610these specifies a number with decimal value @code{10}.
3611
3612The @samp{%o}, @samp{%u}, and @samp{%x} conversions match unsigned
3613integers in octal, decimal, and hexadecimal radices, respectively. The
3614syntax that is recognized is the same as that for the @code{strtoul}
3615function (@pxref{Parsing of Integers}) with the appropriate value
3616(@code{8}, @code{10}, or @code{16}) for the @var{base} argument.
3617
3618The @samp{%X} conversion is identical to the @samp{%x} conversion. They
3619both permit either uppercase or lowercase letters to be used as digits.
3620
3621The default type of the corresponding argument for the @code{%d} and
3622@code{%i} conversions is @code{int *}, and @code{unsigned int *} for the
3623other integer conversions. You can use the following type modifiers to
3624specify other sizes of integer:
3625
3626@table @samp
cc3fa755
UD
3627@item hh
3628Specifies that the argument is a @code{signed char *} or @code{unsigned
3629char *}.
3630
ec751a23 3631This modifier was introduced in @w{ISO C99}.
e852e889 3632
28f540f4
RM
3633@item h
3634Specifies that the argument is a @code{short int *} or @code{unsigned
3635short int *}.
3636
e852e889
UD
3637@item j
3638Specifies that the argument is a @code{intmax_t *} or @code{uintmax_t *}.
3639
ec751a23 3640This modifier was introduced in @w{ISO C99}.
e852e889 3641
28f540f4
RM
3642@item l
3643Specifies that the argument is a @code{long int *} or @code{unsigned
3644long int *}. Two @samp{l} characters is like the @samp{L} modifier, below.
3645
b5e73f56
UD
3646If used with @samp{%c} or @samp{%s} the corresponding parameter is
3647considered as a pointer to a wide character or wide character string
3648respectively. This use of @samp{l} was introduced in @w{Amendment 1} to
3649@w{ISO C90}.
3650
28f540f4
RM
3651@need 100
3652@item ll
3653@itemx L
3654@itemx q
3655Specifies 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
3656GNU C compiler. For systems that don't provide extra-long integers, this
3657is the same as @code{long int}.)
3658
3659The @samp{q} modifier is another name for the same thing, which comes
3660from 4.4 BSD; a @w{@code{long long int}} is sometimes called a ``quad''
3661@code{int}.
e852e889
UD
3662
3663@item t
3664Specifies that the argument is a @code{ptrdiff_t *}.
3665
ec751a23 3666This modifier was introduced in @w{ISO C99}.
e852e889
UD
3667
3668@item z
3669Specifies that the argument is a @code{size_t *}.
3670
ec751a23 3671This modifier was introduced in @w{ISO C99}.
28f540f4
RM
3672@end table
3673
3674All of the @samp{%e}, @samp{%f}, @samp{%g}, @samp{%E}, and @samp{%G}
3675input conversions are interchangeable. They all match an optionally
3676signed floating point number, in the same syntax as for the
3677@code{strtod} function (@pxref{Parsing of Floats}).
3678
3679For the floating-point input conversions, the default argument type is
3680@code{float *}. (This is different from the corresponding output
3681conversions, where the default type is @code{double}; remember that
3682@code{float} arguments to @code{printf} are converted to @code{double}
3683by the default argument promotions, but @code{float *} arguments are
3684not promoted to @code{double *}.) You can specify other sizes of float
3685using these type modifiers:
3686
3687@table @samp
3688@item l
3689Specifies that the argument is of type @code{double *}.
3690
3691@item L
3692Specifies that the argument is of type @code{long double *}.
3693@end table
3694
2c6fe0bd
UD
3695For all the above number parsing formats there is an additional optional
3696flag @samp{'}. When this flag is given the @code{scanf} function
3697expects the number represented in the input string to be formatted
3698according to the grouping rules of the currently selected locale
3699(@pxref{General Numeric}).
3700
3701If the @code{"C"} or @code{"POSIX"} locale is selected there is no
3702difference. But for a locale which specifies values for the appropriate
3703fields in the locale the input must have the correct form in the input.
3704Otherwise the longest prefix with a correct form is processed.
3705
28f540f4
RM
3706@node String Input Conversions
3707@subsection String Input Conversions
3708
3709This section describes the @code{scanf} input conversions for reading
b5e73f56
UD
3710string and character values: @samp{%s}, @samp{%S}, @samp{%[}, @samp{%c},
3711and @samp{%C}.
28f540f4
RM
3712
3713You have two options for how to receive the input from these
3714conversions:
3715
3716@itemize @bullet
3717@item
b5e73f56
UD
3718Provide a buffer to store it in. This is the default. You should
3719provide an argument of type @code{char *} or @code{wchar_t *} (the
c703cd7a 3720latter if the @samp{l} modifier is present).
28f540f4
RM
3721
3722@strong{Warning:} To make a robust program, you must make sure that the
3723input (plus its terminating null) cannot possibly exceed the size of the
3724buffer you provide. In general, the only way to do this is to specify a
3725maximum field width one less than the buffer size. @strong{If you
3726provide the buffer, always specify a maximum field width to prevent
3727overflow.}
3728
3729@item
3730Ask @code{scanf} to allocate a big enough buffer, by specifying the
3731@samp{a} flag character. This is a GNU extension. You should provide
3732an argument of type @code{char **} for the buffer address to be stored
3733in. @xref{Dynamic String Input}.
3734@end itemize
3735
3736The @samp{%c} conversion is the simplest: it matches a fixed number of
04b9968b 3737characters, always. The maximum field width says how many characters to
28f540f4
RM
3738read; if you don't specify the maximum, the default is 1. This
3739conversion doesn't append a null character to the end of the text it
3740reads. It also does not skip over initial whitespace characters. It
3741reads precisely the next @var{n} characters, and fails if it cannot get
3742that many. Since there is always a maximum field width with @samp{%c}
3743(whether specified, or 1 by default), you can always prevent overflow by
3744making the buffer long enough.
b5e73f56
UD
3745@comment Is character == byte here??? --drepper
3746
3747If the format is @samp{%lc} or @samp{%C} the function stores wide
3748characters which are converted using the conversion determined at the
3749time the stream was opened from the external byte stream. The number of
3750bytes read from the medium is limited by @code{MB_CUR_LEN * @var{n}} but
c703cd7a 3751at most @var{n} wide characters get stored in the output string.
28f540f4
RM
3752
3753The @samp{%s} conversion matches a string of non-whitespace characters.
3754It skips and discards initial whitespace, but stops when it encounters
3755more whitespace after having read something. It stores a null character
3756at the end of the text that it reads.
3757
3758For example, reading the input:
3759
3760@smallexample
3761 hello, world
3762@end smallexample
3763
3764@noindent
3765with the conversion @samp{%10c} produces @code{" hello, wo"}, but
3766reading the same input with the conversion @samp{%10s} produces
3767@code{"hello,"}.
3768
3769@strong{Warning:} If you do not specify a field width for @samp{%s},
3770then the number of characters read is limited only by where the next
3771whitespace character appears. This almost certainly means that invalid
3772input can make your program crash---which is a bug.
3773
b5e73f56
UD
3774The @samp{%ls} and @samp{%S} format are handled just like @samp{%s}
3775except that the external byte sequence is converted using the conversion
3776associated with the stream to wide characters with their own encoding.
3777A width or precision specified with the format do not directly determine
3778how many bytes are read from the stream since they measure wide
3779characters. But an upper limit can be computed by multiplying the value
3780of the width or precision by @code{MB_CUR_MAX}.
3781
28f540f4
RM
3782To read in characters that belong to an arbitrary set of your choice,
3783use the @samp{%[} conversion. You specify the set between the @samp{[}
3784character and a following @samp{]} character, using the same syntax used
9878ad46 3785in regular expressions for explicit sets of characters. As special cases:
28f540f4
RM
3786
3787@itemize @bullet
19c3f208 3788@item
28f540f4
RM
3789A literal @samp{]} character can be specified as the first character
3790of the set.
3791
19c3f208 3792@item
28f540f4
RM
3793An embedded @samp{-} character (that is, one that is not the first or
3794last character of the set) is used to specify a range of characters.
3795
19c3f208 3796@item
28f540f4 3797If a caret character @samp{^} immediately follows the initial @samp{[},
c703cd7a 3798then the set of allowed input characters is everything @emph{except}
28f540f4
RM
3799the characters listed.
3800@end itemize
3801
3802The @samp{%[} conversion does not skip over initial whitespace
3803characters.
3804
9878ad46
OB
3805Note that the @dfn{character class} syntax available in character sets
3806that appear inside regular expressions (such as @samp{[:alpha:]}) is
3807@emph{not} available in the @samp{%[} conversion.
3808
28f540f4
RM
3809Here are some examples of @samp{%[} conversions and what they mean:
3810
3811@table @samp
3812@item %25[1234567890]
3813Matches a string of up to 25 digits.
3814
3815@item %25[][]
3816Matches a string of up to 25 square brackets.
3817
3818@item %25[^ \f\n\r\t\v]
3819Matches a string up to 25 characters long that doesn't contain any of
3820the standard whitespace characters. This is slightly different from
3821@samp{%s}, because if the input begins with a whitespace character,
3822@samp{%[} reports a matching failure while @samp{%s} simply discards the
3823initial whitespace.
3824
19c3f208 3825@item %25[a-z]
28f540f4
RM
3826Matches up to 25 lowercase characters.
3827@end table
3828
b5e73f56
UD
3829As for @samp{%c} and @samp{%s} the @samp{%[} format is also modified to
3830produce wide characters if the @samp{l} modifier is present. All what
3831is said about @samp{%ls} above is true for @samp{%l[}.
3832
28f540f4
RM
3833One more reminder: the @samp{%s} and @samp{%[} conversions are
3834@strong{dangerous} if you don't specify a maximum width or use the
3835@samp{a} flag, because input too long would overflow whatever buffer you
3836have provided for it. No matter how long your buffer is, a user could
3837supply input that is longer. A well-written program reports invalid
3838input with a comprehensible error message, not with a crash.
3839
3840@node Dynamic String Input
3841@subsection Dynamically Allocating String Conversions
3842
3843A GNU extension to formatted input lets you safely read a string with no
3844maximum size. Using this feature, you don't supply a buffer; instead,
3845@code{scanf} allocates a buffer big enough to hold the data and gives
3846you its address. To use this feature, write @samp{a} as a flag
3847character, as in @samp{%as} or @samp{%a[0-9a-z]}.
3848
3849The pointer argument you supply for where to store the input should have
3850type @code{char **}. The @code{scanf} function allocates a buffer and
3851stores its address in the word that the argument points to. You should
3852free the buffer with @code{free} when you no longer need it.
3853
3854Here is an example of using the @samp{a} flag with the @samp{%[@dots{}]}
3855conversion specification to read a ``variable assignment'' of the form
3856@samp{@var{variable} = @var{value}}.
3857
3858@smallexample
3859@{
3860 char *variable, *value;
3861
3862 if (2 > scanf ("%a[a-zA-Z0-9] = %a[^\n]\n",
162ba701 3863 &variable, &value))
28f540f4
RM
3864 @{
3865 invalid_input_error ();
3866 return 0;
3867 @}
3868
3869 @dots{}
3870@}
3871@end smallexample
3872
3873@node Other Input Conversions
3874@subsection Other Input Conversions
3875
3876This section describes the miscellaneous input conversions.
3877
3878The @samp{%p} conversion is used to read a pointer value. It recognizes
04b9968b 3879the same syntax used by the @samp{%p} output conversion for
28f540f4
RM
3880@code{printf} (@pxref{Other Output Conversions}); that is, a hexadecimal
3881number just as the @samp{%x} conversion accepts. The corresponding
3882argument should be of type @code{void **}; that is, the address of a
3883place to store a pointer.
3884
3885The resulting pointer value is not guaranteed to be valid if it was not
3886originally written during the same program execution that reads it in.
3887
3888The @samp{%n} conversion produces the number of characters read so far
3889by this call. The corresponding argument should be of type @code{int *}.
3890This conversion works in the same way as the @samp{%n} conversion for
3891@code{printf}; see @ref{Other Output Conversions}, for an example.
3892
3893The @samp{%n} conversion is the only mechanism for determining the
3894success of literal matches or conversions with suppressed assignments.
3895If the @samp{%n} follows the locus of a matching failure, then no value
3896is stored for it since @code{scanf} returns before processing the
3897@samp{%n}. If you store @code{-1} in that argument slot before calling
3898@code{scanf}, the presence of @code{-1} after @code{scanf} indicates an
3899error occurred before the @samp{%n} was reached.
3900
3901Finally, the @samp{%%} conversion matches a literal @samp{%} character
3902in the input stream, without using an argument. This conversion does
3903not permit any flags, field width, or type modifier to be specified.
3904
3905@node Formatted Input Functions
3906@subsection Formatted Input Functions
3907
3908Here are the descriptions of the functions for performing formatted
3909input.
3910Prototypes for these functions are in the header file @file{stdio.h}.
3911@pindex stdio.h
3912
28f540f4 3913@deftypefun int scanf (const char *@var{template}, @dots{})
d08a7e4c 3914@standards{ISO, stdio.h}
171e9210 3915@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
3916The @code{scanf} function reads formatted input from the stream
3917@code{stdin} under the control of the template string @var{template}.
3918The optional arguments are pointers to the places which receive the
3919resulting values.
3920
3921The return value is normally the number of successful assignments. If
04b9968b
UD
3922an end-of-file condition is detected before any matches are performed,
3923including matches against whitespace and literal characters in the
3924template, then @code{EOF} is returned.
28f540f4
RM
3925@end deftypefun
3926
b5e73f56 3927@deftypefun int wscanf (const wchar_t *@var{template}, @dots{})
d08a7e4c 3928@standards{ISO, wchar.h}
171e9210 3929@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
3930The @code{wscanf} function reads formatted input from the stream
3931@code{stdin} under the control of the template string @var{template}.
3932The optional arguments are pointers to the places which receive the
3933resulting values.
3934
3935The return value is normally the number of successful assignments. If
3936an end-of-file condition is detected before any matches are performed,
3937including matches against whitespace and literal characters in the
3938template, then @code{WEOF} is returned.
3939@end deftypefun
3940
28f540f4 3941@deftypefun int fscanf (FILE *@var{stream}, const char *@var{template}, @dots{})
d08a7e4c 3942@standards{ISO, stdio.h}
171e9210 3943@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
3944This function is just like @code{scanf}, except that the input is read
3945from the stream @var{stream} instead of @code{stdin}.
3946@end deftypefun
3947
b5e73f56 3948@deftypefun int fwscanf (FILE *@var{stream}, const wchar_t *@var{template}, @dots{})
d08a7e4c 3949@standards{ISO, wchar.h}
171e9210 3950@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
3951This function is just like @code{wscanf}, except that the input is read
3952from the stream @var{stream} instead of @code{stdin}.
3953@end deftypefun
3954
28f540f4 3955@deftypefun int sscanf (const char *@var{s}, const char *@var{template}, @dots{})
d08a7e4c 3956@standards{ISO, stdio.h}
171e9210 3957@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
3958This is like @code{scanf}, except that the characters are taken from the
3959null-terminated string @var{s} instead of from a stream. Reaching the
3960end of the string is treated as an end-of-file condition.
3961
3962The behavior of this function is undefined if copying takes place
3963between objects that overlap---for example, if @var{s} is also given
b5e73f56
UD
3964as an argument to receive a string read under control of the @samp{%s},
3965@samp{%S}, or @samp{%[} conversion.
3966@end deftypefun
3967
8ded91fb 3968@deftypefun int swscanf (const wchar_t *@var{ws}, const wchar_t *@var{template}, @dots{})
d08a7e4c 3969@standards{ISO, wchar.h}
171e9210 3970@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
3971This is like @code{wscanf}, except that the characters are taken from the
3972null-terminated string @var{ws} instead of from a stream. Reaching the
3973end of the string is treated as an end-of-file condition.
3974
3975The behavior of this function is undefined if copying takes place
3976between objects that overlap---for example, if @var{ws} is also given as
3977an argument to receive a string read under control of the @samp{%s},
3978@samp{%S}, or @samp{%[} conversion.
28f540f4
RM
3979@end deftypefun
3980
3981@node Variable Arguments Input
3982@subsection Variable Arguments Input Functions
3983
3984The functions @code{vscanf} and friends are provided so that you can
3985define your own variadic @code{scanf}-like functions that make use of
3986the same internals as the built-in formatted output functions.
3987These functions are analogous to the @code{vprintf} series of output
3988functions. @xref{Variable Arguments Output}, for important
3989information on how to use them.
3990
b5e73f56
UD
3991@strong{Portability Note:} The functions listed in this section were
3992introduced in @w{ISO C99} and were before available as GNU extensions.
28f540f4 3993
28f540f4 3994@deftypefun int vscanf (const char *@var{template}, va_list @var{ap})
d08a7e4c 3995@standards{ISO, stdio.h}
171e9210 3996@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
04b9968b 3997This function is similar to @code{scanf}, but instead of taking
28f540f4
RM
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
b5e73f56 4002@deftypefun int vwscanf (const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 4003@standards{ISO, wchar.h}
171e9210 4004@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
4005This function is similar to @code{wscanf}, but instead of taking
4006a variable number of arguments directly, it takes an argument list
4007pointer @var{ap} of type @code{va_list} (@pxref{Variadic Functions}).
4008@end deftypefun
4009
28f540f4 4010@deftypefun int vfscanf (FILE *@var{stream}, const char *@var{template}, va_list @var{ap})
d08a7e4c 4011@standards{ISO, stdio.h}
171e9210 4012@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
28f540f4
RM
4013This is the equivalent of @code{fscanf} with the variable argument list
4014specified directly as for @code{vscanf}.
4015@end deftypefun
4016
b5e73f56 4017@deftypefun int vfwscanf (FILE *@var{stream}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 4018@standards{ISO, wchar.h}
171e9210 4019@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@asucorrupt{} @ascuheap{}}@acunsafe{@acsmem{} @aculock{} @acucorrupt{}}}
b5e73f56
UD
4020This is the equivalent of @code{fwscanf} with the variable argument list
4021specified directly as for @code{vwscanf}.
4022@end deftypefun
4023
28f540f4 4024@deftypefun int vsscanf (const char *@var{s}, const char *@var{template}, va_list @var{ap})
d08a7e4c 4025@standards{ISO, stdio.h}
171e9210 4026@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4
RM
4027This is the equivalent of @code{sscanf} with the variable argument list
4028specified directly as for @code{vscanf}.
4029@end deftypefun
4030
b5e73f56 4031@deftypefun int vswscanf (const wchar_t *@var{s}, const wchar_t *@var{template}, va_list @var{ap})
d08a7e4c 4032@standards{ISO, wchar.h}
171e9210 4033@safety{@prelim{}@mtsafe{@mtslocale{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
b5e73f56
UD
4034This is the equivalent of @code{swscanf} with the variable argument list
4035specified directly as for @code{vwscanf}.
4036@end deftypefun
4037
28f540f4
RM
4038In GNU C, there is a special construct you can use to let the compiler
4039know that a function uses a @code{scanf}-style format string. Then it
4040can check the number and types of arguments in each call to the
4041function, and warn you when they do not match the format string.
88197030 4042For details, see @ref{Function Attributes, , Declaring Attributes of Functions,
1f6676d7 4043gcc, Using GNU CC}.
28f540f4
RM
4044
4045@node EOF and Errors
4046@section End-Of-File and Errors
4047
4048@cindex end of file, on a stream
4049Many of the functions described in this chapter return the value of the
4050macro @code{EOF} to indicate unsuccessful completion of the operation.
4051Since @code{EOF} is used to report both end of file and random errors,
4052it's often better to use the @code{feof} function to check explicitly
4053for end of file and @code{ferror} to check for errors. These functions
4054check indicators that are part of the internal state of the stream
4055object, indicators set if the appropriate condition was detected by a
4056previous I/O operation on that stream.
4057
28f540f4 4058@deftypevr Macro int EOF
d08a7e4c 4059@standards{ISO, stdio.h}
b5e73f56
UD
4060This macro is an integer value that is returned by a number of narrow
4061stream functions to indicate an end-of-file condition, or some other
1f77f049 4062error situation. With @theglibc{}, @code{EOF} is @code{-1}. In
b5e73f56
UD
4063other libraries, its value may be some other negative number.
4064
4065This symbol is declared in @file{stdio.h}.
4066@end deftypevr
4067
b5e73f56 4068@deftypevr Macro int WEOF
d08a7e4c 4069@standards{ISO, wchar.h}
b5e73f56
UD
4070This macro is an integer value that is returned by a number of wide
4071stream functions to indicate an end-of-file condition, or some other
1f77f049 4072error situation. With @theglibc{}, @code{WEOF} is @code{-1}. In
b5e73f56
UD
4073other libraries, its value may be some other negative number.
4074
4075This symbol is declared in @file{wchar.h}.
28f540f4
RM
4076@end deftypevr
4077
28f540f4 4078@deftypefun int feof (FILE *@var{stream})
d08a7e4c 4079@standards{ISO, stdio.h}
171e9210 4080@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
28f540f4
RM
4081The @code{feof} function returns nonzero if and only if the end-of-file
4082indicator for the stream @var{stream} is set.
b5e73f56
UD
4083
4084This symbol is declared in @file{stdio.h}.
28f540f4
RM
4085@end deftypefun
4086
7b4161bb 4087@deftypefun int feof_unlocked (FILE *@var{stream})
d08a7e4c 4088@standards{GNU, stdio.h}
171e9210
AO
4089@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
4090@c There isn't much of a thread unsafety risk in reading a flag word and
4091@c testing a bit in it.
7b4161bb 4092The @code{feof_unlocked} function is equivalent to the @code{feof}
1dc843f7 4093function except that it does not implicitly lock the stream.
7b4161bb
UD
4094
4095This function is a GNU extension.
b5e73f56
UD
4096
4097This symbol is declared in @file{stdio.h}.
7b4161bb
UD
4098@end deftypefun
4099
28f540f4 4100@deftypefun int ferror (FILE *@var{stream})
d08a7e4c 4101@standards{ISO, stdio.h}
171e9210 4102@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
28f540f4
RM
4103The @code{ferror} function returns nonzero if and only if the error
4104indicator for the stream @var{stream} is set, indicating that an error
4105has occurred on a previous operation on the stream.
b5e73f56
UD
4106
4107This symbol is declared in @file{stdio.h}.
28f540f4
RM
4108@end deftypefun
4109
7b4161bb 4110@deftypefun int ferror_unlocked (FILE *@var{stream})
d08a7e4c 4111@standards{GNU, stdio.h}
171e9210 4112@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7b4161bb 4113The @code{ferror_unlocked} function is equivalent to the @code{ferror}
1dc843f7 4114function except that it does not implicitly lock the stream.
7b4161bb
UD
4115
4116This function is a GNU extension.
b5e73f56
UD
4117
4118This symbol is declared in @file{stdio.h}.
7b4161bb
UD
4119@end deftypefun
4120
28f540f4
RM
4121In addition to setting the error indicator associated with the stream,
4122the functions that operate on streams also set @code{errno} in the same
4123way as the corresponding low-level functions that operate on file
4124descriptors. For example, all of the functions that perform output to a
4125stream---such as @code{fputc}, @code{printf}, and @code{fflush}---are
4126implemented in terms of @code{write}, and all of the @code{errno} error
4127conditions defined for @code{write} are meaningful for these functions.
4128For more information about the descriptor-level I/O functions, see
4129@ref{Low-Level I/O}.
4130
460e040a
UD
4131@node Error Recovery
4132@section Recovering from errors
4133
7ba73c63 4134You may explicitly clear the error and EOF flags with the @code{clearerr}
460e040a
UD
4135function.
4136
460e040a 4137@deftypefun void clearerr (FILE *@var{stream})
d08a7e4c 4138@standards{ISO, stdio.h}
171e9210 4139@safety{@prelim{}@mtsafe{}@assafe{}@acunsafe{@aculock{}}}
460e040a
UD
4140This function clears the end-of-file and error indicators for the
4141stream @var{stream}.
4142
4143The file positioning functions (@pxref{File Positioning}) also clear the
4144end-of-file indicator for the stream.
4145@end deftypefun
4146
7b4161bb 4147@deftypefun void clearerr_unlocked (FILE *@var{stream})
d08a7e4c 4148@standards{GNU, stdio.h}
171e9210 4149@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@assafe{}@acsafe{}}
7b4161bb 4150The @code{clearerr_unlocked} function is equivalent to the @code{clearerr}
1dc843f7 4151function except that it does not implicitly lock the stream.
7b4161bb
UD
4152
4153This function is a GNU extension.
4154@end deftypefun
4155
460e040a
UD
4156Note that it is @emph{not} correct to just clear the error flag and retry
4157a failed stream operation. After a failed write, any number of
4158characters since the last buffer flush may have been committed to the
4159file, while some buffered data may have been discarded. Merely retrying
4160can thus cause lost or repeated data.
4161
4162A failed read may leave the file pointer in an inappropriate position for
4163a second try. In both cases, you should seek to a known position before
4164retrying.
4165
4166Most errors that can happen are not recoverable --- a second try will
4167always fail again in the same way. So usually it is best to give up and
4168report the error to the user, rather than install complicated recovery
4169logic.
4170
7ba73c63 4171One important exception is @code{EINTR} (@pxref{Interrupted Primitives}).
460e040a
UD
4172Many stream I/O implementations will treat it as an ordinary error, which
4173can be quite inconvenient. You can avoid this hassle by installing all
4174signals with the @code{SA_RESTART} flag.
4175
4176For similar reasons, setting nonblocking I/O on a stream's file
4177descriptor is not usually advisable.
4178
28f540f4
RM
4179@node Binary Streams
4180@section Text and Binary Streams
4181
a7a93d50 4182@gnusystems{} and other POSIX-compatible operating systems organize all
28f540f4
RM
4183files as uniform sequences of characters. However, some other systems
4184make a distinction between files containing text and files containing
f65fd747 4185binary data, and the input and output facilities of @w{ISO C} provide for
28f540f4
RM
4186this distinction. This section tells you how to write programs portable
4187to such systems.
4188
4189@cindex text stream
4190@cindex binary stream
4191When you open a stream, you can specify either a @dfn{text stream} or a
4192@dfn{binary stream}. You indicate that you want a binary stream by
4193specifying the @samp{b} modifier in the @var{opentype} argument to
4194@code{fopen}; see @ref{Opening Streams}. Without this
4195option, @code{fopen} opens the file as a text stream.
4196
4197Text and binary streams differ in several ways:
4198
4199@itemize @bullet
4200@item
4201The data read from a text stream is divided into @dfn{lines} which are
4202terminated by newline (@code{'\n'}) characters, while a binary stream is
4203simply a long series of characters. A text stream might on some systems
4204fail to handle lines more than 254 characters long (including the
4205terminating newline character).
4206@cindex lines (in a text file)
4207
4208@item
4209On some systems, text files can contain only printing characters,
4210horizontal tab characters, and newlines, and so text streams may not
4211support other characters. However, binary streams can handle any
4212character value.
4213
4214@item
4215Space characters that are written immediately preceding a newline
4216character in a text stream may disappear when the file is read in again.
4217
4218@item
4219More generally, there need not be a one-to-one mapping between
4220characters that are read from or written to a text stream, and the
4221characters in the actual file.
4222@end itemize
4223
4224Since a binary stream is always more capable and more predictable than a
4225text stream, you might wonder what purpose text streams serve. Why not
4226simply always use binary streams? The answer is that on these operating
4227systems, text and binary streams use different file formats, and the
4228only way to read or write ``an ordinary file of text'' that can work
4229with other text-oriented programs is through a text stream.
4230
1f77f049 4231In @theglibc{}, and on all POSIX systems, there is no difference
28f540f4
RM
4232between text streams and binary streams. When you open a stream, you
4233get the same kind of stream regardless of whether you ask for binary.
4234This stream can handle any file content, and has none of the
4235restrictions that text streams sometimes have.
4236
4237@node File Positioning
4238@section File Positioning
4239@cindex file positioning on a stream
4240@cindex positioning a stream
4241@cindex seeking on a stream
4242
4243The @dfn{file position} of a stream describes where in the file the
4244stream is currently reading or writing. I/O on the stream advances the
a7a93d50 4245file position through the file. On @gnusystems{}, the file position is
28f540f4
RM
4246represented as an integer, which counts the number of bytes from the
4247beginning of the file. @xref{File Position}.
4248
4249During I/O to an ordinary disk file, you can change the file position
4250whenever you wish, so as to read or write any portion of the file. Some
4251other kinds of files may also permit this. Files which support changing
4252the file position are sometimes referred to as @dfn{random-access}
4253files.
4254
4255You can use the functions in this section to examine or modify the file
4256position indicator associated with a stream. The symbols listed below
4257are declared in the header file @file{stdio.h}.
4258@pindex stdio.h
4259
28f540f4 4260@deftypefun {long int} ftell (FILE *@var{stream})
d08a7e4c 4261@standards{ISO, stdio.h}
171e9210 4262@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4263This function returns the current file position of the stream
4264@var{stream}.
4265
4266This function can fail if the stream doesn't support file positioning,
4267or if the file position can't be represented in a @code{long int}, and
4268possibly for other reasons as well. If a failure occurs, a value of
4269@code{-1} is returned.
4270@end deftypefun
4271
a5a0310d 4272@deftypefun off_t ftello (FILE *@var{stream})
d08a7e4c 4273@standards{Unix98, stdio.h}
171e9210 4274@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
04b9968b
UD
4275The @code{ftello} function is similar to @code{ftell}, except that it
4276returns a value of type @code{off_t}. Systems which support this type
4277use it to describe all file positions, unlike the POSIX specification
4278which uses a long int. The two are not necessarily the same size.
4279Therefore, using ftell can lead to problems if the implementation is
4280written on top of a POSIX compliant low-level I/O implementation, and using
4281@code{ftello} is preferable whenever it is available.
4282
4283If this function fails it returns @code{(off_t) -1}. This can happen due
a5a0310d
UD
4284to missing support for file positioning or internal errors. Otherwise
4285the return value is the current file position.
4286
4287The function is an extension defined in the Unix Single Specification
4288version 2.
a3a4a74e
UD
4289
4290When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 429132 bit system this function is in fact @code{ftello64}. I.e., the
a3a4a74e
UD
4292LFS interface transparently replaces the old interface.
4293@end deftypefun
4294
a3a4a74e 4295@deftypefun off64_t ftello64 (FILE *@var{stream})
d08a7e4c 4296@standards{Unix98, stdio.h}
171e9210 4297@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4298This function is similar to @code{ftello} with the only difference that
4299the return value is of type @code{off64_t}. This also requires that the
4300stream @var{stream} was opened using either @code{fopen64},
4301@code{freopen64}, or @code{tmpfile64} since otherwise the underlying
9ceeb279 4302file operations to position the file pointer beyond the @twoexp{31}
a3a4a74e
UD
4303bytes limit might fail.
4304
4305If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4306bits machine this function is available under the name @code{ftello}
4307and so transparently replaces the old interface.
a5a0310d
UD
4308@end deftypefun
4309
28f540f4 4310@deftypefun int fseek (FILE *@var{stream}, long int @var{offset}, int @var{whence})
d08a7e4c 4311@standards{ISO, stdio.h}
171e9210 4312@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4313The @code{fseek} function is used to change the file position of the
4314stream @var{stream}. The value of @var{whence} must be one of the
4315constants @code{SEEK_SET}, @code{SEEK_CUR}, or @code{SEEK_END}, to
4316indicate whether the @var{offset} is relative to the beginning of the
4317file, the current file position, or the end of the file, respectively.
4318
4319This function returns a value of zero if the operation was successful,
4320and a nonzero value to indicate failure. A successful call also clears
4321the end-of-file indicator of @var{stream} and discards any characters
4322that were ``pushed back'' by the use of @code{ungetc}.
4323
4324@code{fseek} either flushes any buffered output before setting the file
4325position or else remembers it so it will be written later in its proper
4326place in the file.
4327@end deftypefun
4328
a5a0310d 4329@deftypefun int fseeko (FILE *@var{stream}, off_t @var{offset}, int @var{whence})
d08a7e4c 4330@standards{Unix98, stdio.h}
171e9210 4331@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a5a0310d
UD
4332This function is similar to @code{fseek} but it corrects a problem with
4333@code{fseek} in a system with POSIX types. Using a value of type
4334@code{long int} for the offset is not compatible with POSIX.
4335@code{fseeko} uses the correct type @code{off_t} for the @var{offset}
4336parameter.
4337
f2ea0f5b 4338For this reason it is a good idea to prefer @code{ftello} whenever it is
a5a0310d
UD
4339available since its functionality is (if different at all) closer the
4340underlying definition.
4341
c703cd7a 4342The functionality and return value are the same as for @code{fseek}.
a5a0310d
UD
4343
4344The function is an extension defined in the Unix Single Specification
4345version 2.
a3a4a74e
UD
4346
4347When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 434832 bit system this function is in fact @code{fseeko64}. I.e., the
a3a4a74e
UD
4349LFS interface transparently replaces the old interface.
4350@end deftypefun
4351
a3a4a74e 4352@deftypefun int fseeko64 (FILE *@var{stream}, off64_t @var{offset}, int @var{whence})
d08a7e4c 4353@standards{Unix98, stdio.h}
171e9210 4354@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4355This function is similar to @code{fseeko} with the only difference that
4356the @var{offset} parameter is of type @code{off64_t}. This also
4357requires that the stream @var{stream} was opened using either
4358@code{fopen64}, @code{freopen64}, or @code{tmpfile64} since otherwise
4359the underlying file operations to position the file pointer beyond the
9ceeb279 4360@twoexp{31} bytes limit might fail.
a3a4a74e
UD
4361
4362If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4363bits machine this function is available under the name @code{fseeko}
4364and so transparently replaces the old interface.
a5a0310d
UD
4365@end deftypefun
4366
4367@strong{Portability Note:} In non-POSIX systems, @code{ftell},
4368@code{ftello}, @code{fseek} and @code{fseeko} might work reliably only
4369on binary streams. @xref{Binary Streams}.
28f540f4
RM
4370
4371The following symbolic constants are defined for use as the @var{whence}
4372argument to @code{fseek}. They are also used with the @code{lseek}
4373function (@pxref{I/O Primitives}) and to specify offsets for file locks
4374(@pxref{Control Operations}).
4375
28f540f4 4376@deftypevr Macro int SEEK_SET
d08a7e4c 4377@standards{ISO, stdio.h}
28f540f4 4378This is an integer constant which, when used as the @var{whence}
c703cd7a 4379argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4380the offset provided is relative to the beginning of the file.
28f540f4
RM
4381@end deftypevr
4382
28f540f4 4383@deftypevr Macro int SEEK_CUR
d08a7e4c 4384@standards{ISO, stdio.h}
28f540f4 4385This is an integer constant which, when used as the @var{whence}
c703cd7a 4386argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4387the offset provided is relative to the current file position.
28f540f4
RM
4388@end deftypevr
4389
28f540f4 4390@deftypevr Macro int SEEK_END
d08a7e4c 4391@standards{ISO, stdio.h}
28f540f4 4392This is an integer constant which, when used as the @var{whence}
c703cd7a 4393argument to the @code{fseek} or @code{fseeko} functions, specifies that
a5a0310d 4394the offset provided is relative to the end of the file.
28f540f4
RM
4395@end deftypevr
4396
28f540f4 4397@deftypefun void rewind (FILE *@var{stream})
d08a7e4c 4398@standards{ISO, stdio.h}
171e9210 4399@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4 4400The @code{rewind} function positions the stream @var{stream} at the
f2ea0f5b 4401beginning of the file. It is equivalent to calling @code{fseek} or
a5a0310d
UD
4402@code{fseeko} on the @var{stream} with an @var{offset} argument of
4403@code{0L} and a @var{whence} argument of @code{SEEK_SET}, except that
4404the return value is discarded and the error indicator for the stream is
4405reset.
28f540f4
RM
4406@end deftypefun
4407
4408These three aliases for the @samp{SEEK_@dots{}} constants exist for the
4409sake of compatibility with older BSD systems. They are defined in two
4410different header files: @file{fcntl.h} and @file{sys/file.h}.
4411
2fe82ca6 4412@vtable @code
28f540f4 4413@item L_SET
d08a7e4c 4414@standards{BSD, sys/file.h}
28f540f4
RM
4415An alias for @code{SEEK_SET}.
4416
28f540f4 4417@item L_INCR
d08a7e4c 4418@standards{BSD, sys/file.h}
28f540f4
RM
4419An alias for @code{SEEK_CUR}.
4420
28f540f4 4421@item L_XTND
d08a7e4c 4422@standards{BSD, sys/file.h}
28f540f4 4423An alias for @code{SEEK_END}.
2fe82ca6 4424@end vtable
28f540f4
RM
4425
4426@node Portable Positioning
4427@section Portable File-Position Functions
4428
a7a93d50 4429On @gnusystems{}, the file position is truly a character count. You
a5a0310d
UD
4430can specify any character count value as an argument to @code{fseek} or
4431@code{fseeko} and get reliable results for any random access file.
4432However, some @w{ISO C} systems do not represent file positions in this
4433way.
28f540f4
RM
4434
4435On some systems where text streams truly differ from binary streams, it
4436is impossible to represent the file position of a text stream as a count
4437of characters from the beginning of the file. For example, the file
4438position on some systems must encode both a record offset within the
4439file, and a character offset within the record.
4440
4441As a consequence, if you want your programs to be portable to these
4442systems, you must observe certain rules:
4443
4444@itemize @bullet
4445@item
4446The value returned from @code{ftell} on a text stream has no predictable
4447relationship to the number of characters you have read so far. The only
4448thing you can rely on is that you can use it subsequently as the
a5a0310d
UD
4449@var{offset} argument to @code{fseek} or @code{fseeko} to move back to
4450the same file position.
28f540f4 4451
19c3f208 4452@item
a5a0310d 4453In a call to @code{fseek} or @code{fseeko} on a text stream, either the
04b9968b 4454@var{offset} must be zero, or @var{whence} must be @code{SEEK_SET} and
ded5b9b7 4455the @var{offset} must be the result of an earlier call to @code{ftell}
04b9968b 4456on the same stream.
28f540f4
RM
4457
4458@item
4459The value of the file position indicator of a text stream is undefined
4460while there are characters that have been pushed back with @code{ungetc}
4461that haven't been read or discarded. @xref{Unreading}.
4462@end itemize
4463
4464But even if you observe these rules, you may still have trouble for long
4465files, because @code{ftell} and @code{fseek} use a @code{long int} value
4466to represent the file position. This type may not have room to encode
a5a0310d
UD
4467all the file positions in a large file. Using the @code{ftello} and
4468@code{fseeko} functions might help here since the @code{off_t} type is
4469expected to be able to hold all file position values but this still does
4470not help to handle additional information which must be associated with
4471a file position.
28f540f4
RM
4472
4473So if you do want to support systems with peculiar encodings for the
4474file positions, it is better to use the functions @code{fgetpos} and
4475@code{fsetpos} instead. These functions represent the file position
4476using the data type @code{fpos_t}, whose internal representation varies
4477from system to system.
4478
4479These symbols are declared in the header file @file{stdio.h}.
4480@pindex stdio.h
4481
28f540f4 4482@deftp {Data Type} fpos_t
d08a7e4c 4483@standards{ISO, stdio.h}
28f540f4
RM
4484This is the type of an object that can encode information about the
4485file position of a stream, for use by the functions @code{fgetpos} and
4486@code{fsetpos}.
4487
a7a93d50 4488In @theglibc{}, @code{fpos_t} is an opaque data structure that
5988b69d
AJ
4489contains internal data to represent file offset and conversion state
4490information. In other systems, it might have a different internal
28f540f4 4491representation.
a3a4a74e 4492
0be8752b 4493When compiling with @code{_FILE_OFFSET_BITS == 64} on a 32 bit machine
5988b69d
AJ
4494this type is in fact equivalent to @code{fpos64_t} since the LFS
4495interface transparently replaces the old interface.
a3a4a74e
UD
4496@end deftp
4497
a3a4a74e 4498@deftp {Data Type} fpos64_t
d08a7e4c 4499@standards{Unix98, stdio.h}
a3a4a74e
UD
4500This is the type of an object that can encode information about the
4501file position of a stream, for use by the functions @code{fgetpos64} and
4502@code{fsetpos64}.
4503
a7a93d50 4504In @theglibc{}, @code{fpos64_t} is an opaque data structure that
5988b69d
AJ
4505contains internal data to represent file offset and conversion state
4506information. In other systems, it might have a different internal
a3a4a74e 4507representation.
28f540f4
RM
4508@end deftp
4509
28f540f4 4510@deftypefun int fgetpos (FILE *@var{stream}, fpos_t *@var{position})
d08a7e4c 4511@standards{ISO, stdio.h}
171e9210 4512@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4513This function stores the value of the file position indicator for the
4514stream @var{stream} in the @code{fpos_t} object pointed to by
4515@var{position}. If successful, @code{fgetpos} returns zero; otherwise
4516it returns a nonzero value and stores an implementation-defined positive
4517value in @code{errno}.
a3a4a74e
UD
4518
4519When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 452032 bit system the function is in fact @code{fgetpos64}. I.e., the LFS
5988b69d 4521interface transparently replaces the old interface.
a3a4a74e
UD
4522@end deftypefun
4523
a3a4a74e 4524@deftypefun int fgetpos64 (FILE *@var{stream}, fpos64_t *@var{position})
d08a7e4c 4525@standards{Unix98, stdio.h}
171e9210 4526@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4527This function is similar to @code{fgetpos} but the file position is
4528returned in a variable of type @code{fpos64_t} to which @var{position}
4529points.
4530
4531If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4532bits machine this function is available under the name @code{fgetpos}
4533and so transparently replaces the old interface.
28f540f4
RM
4534@end deftypefun
4535
a3a4a74e 4536@deftypefun int fsetpos (FILE *@var{stream}, const fpos_t *@var{position})
d08a7e4c 4537@standards{ISO, stdio.h}
171e9210 4538@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4539This function sets the file position indicator for the stream @var{stream}
4540to the position @var{position}, which must have been set by a previous
4541call to @code{fgetpos} on the same stream. If successful, @code{fsetpos}
4542clears the end-of-file indicator on the stream, discards any characters
4543that were ``pushed back'' by the use of @code{ungetc}, and returns a value
4544of zero. Otherwise, @code{fsetpos} returns a nonzero value and stores
4545an implementation-defined positive value in @code{errno}.
a3a4a74e
UD
4546
4547When the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a
0be8752b 454832 bit system the function is in fact @code{fsetpos64}. I.e., the LFS
5988b69d 4549interface transparently replaces the old interface.
a3a4a74e
UD
4550@end deftypefun
4551
a3a4a74e 4552@deftypefun int fsetpos64 (FILE *@var{stream}, const fpos64_t *@var{position})
d08a7e4c 4553@standards{Unix98, stdio.h}
171e9210 4554@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
a3a4a74e
UD
4555This function is similar to @code{fsetpos} but the file position used
4556for positioning is provided in a variable of type @code{fpos64_t} to
4557which @var{position} points.
4558
4559If the sources are compiled with @code{_FILE_OFFSET_BITS == 64} on a 32
4560bits machine this function is available under the name @code{fsetpos}
4561and so transparently replaces the old interface.
28f540f4
RM
4562@end deftypefun
4563
4564@node Stream Buffering
4565@section Stream Buffering
4566
4567@cindex buffering of streams
4568Characters that are written to a stream are normally accumulated and
4569transmitted asynchronously to the file in a block, instead of appearing
4570as soon as they are output by the application program. Similarly,
4571streams often retrieve input from the host environment in blocks rather
4572than on a character-by-character basis. This is called @dfn{buffering}.
4573
4574If you are writing programs that do interactive input and output using
4575streams, you need to understand how buffering works when you design the
4576user interface to your program. Otherwise, you might find that output
4577(such as progress or prompt messages) doesn't appear when you intended
04b9968b 4578it to, or displays some other unexpected behavior.
28f540f4
RM
4579
4580This section deals only with controlling when characters are transmitted
4581between the stream and the file or device, and @emph{not} with how
4582things like echoing, flow control, and the like are handled on specific
4583classes of devices. For information on common control operations on
4584terminal devices, see @ref{Low-Level Terminal Interface}.
4585
4586You can bypass the stream buffering facilities altogether by using the
4587low-level input and output functions that operate on file descriptors
4588instead. @xref{Low-Level I/O}.
4589
4590@menu
4591* Buffering Concepts:: Terminology is defined here.
4592* Flushing Buffers:: How to ensure that output buffers are flushed.
4593* Controlling Buffering:: How to specify what kind of buffering to use.
4594@end menu
4595
4596@node Buffering Concepts
4597@subsection Buffering Concepts
4598
4599There are three different kinds of buffering strategies:
4600
4601@itemize @bullet
4602@item
4603Characters written to or read from an @dfn{unbuffered} stream are
4604transmitted individually to or from the file as soon as possible.
4605@cindex unbuffered stream
4606
4607@item
4608Characters written to a @dfn{line buffered} stream are transmitted to
4609the file in blocks when a newline character is encountered.
4610@cindex line buffered stream
4611
4612@item
4613Characters written to or read from a @dfn{fully buffered} stream are
4614transmitted to or from the file in blocks of arbitrary size.
4615@cindex fully buffered stream
4616@end itemize
4617
4618Newly opened streams are normally fully buffered, with one exception: a
4619stream connected to an interactive device such as a terminal is
4620initially line buffered. @xref{Controlling Buffering}, for information
4621on how to select a different kind of buffering. Usually the automatic
4622selection gives you the most convenient kind of buffering for the file
4623or device you open.
4624
4625The use of line buffering for interactive devices implies that output
4626messages ending in a newline will appear immediately---which is usually
4627what you want. Output that doesn't end in a newline might or might not
4628show up immediately, so if you want them to appear immediately, you
4629should flush buffered output explicitly with @code{fflush}, as described
4630in @ref{Flushing Buffers}.
4631
4632@node Flushing Buffers
4633@subsection Flushing Buffers
4634
4635@cindex flushing a stream
4636@dfn{Flushing} output on a buffered stream means transmitting all
4637accumulated characters to the file. There are many circumstances when
4638buffered output on a stream is flushed automatically:
4639
4640@itemize @bullet
4641@item
4642When you try to do output and the output buffer is full.
4643
4644@item
4645When the stream is closed. @xref{Closing Streams}.
4646
19c3f208 4647@item
28f540f4
RM
4648When the program terminates by calling @code{exit}.
4649@xref{Normal Termination}.
4650
4651@item
4652When a newline is written, if the stream is line buffered.
4653
4654@item
4655Whenever an input operation on @emph{any} stream actually reads data
4656from its file.
4657@end itemize
4658
4659If you want to flush the buffered output at another time, call
4660@code{fflush}, which is declared in the header file @file{stdio.h}.
4661@pindex stdio.h
4662
28f540f4 4663@deftypefun int fflush (FILE *@var{stream})
d08a7e4c 4664@standards{ISO, stdio.h}
171e9210 4665@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4666This function causes any buffered output on @var{stream} to be delivered
4667to the file. If @var{stream} is a null pointer, then
4668@code{fflush} causes buffered output on @emph{all} open output streams
4669to be flushed.
4670
4671This function returns @code{EOF} if a write error occurs, or zero
4672otherwise.
4673@end deftypefun
4674
7b4161bb 4675@deftypefun int fflush_unlocked (FILE *@var{stream})
d08a7e4c 4676@standards{POSIX, stdio.h}
171e9210 4677@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb 4678The @code{fflush_unlocked} function is equivalent to the @code{fflush}
1dc843f7 4679function except that it does not implicitly lock the stream.
7b4161bb
UD
4680@end deftypefun
4681
4682The @code{fflush} function can be used to flush all streams currently
4683opened. While this is useful in some situations it does often more than
4684necessary since it might be done in situations when terminal input is
4685required and the program wants to be sure that all output is visible on
4686the terminal. But this means that only line buffered streams have to be
4687flushed. Solaris introduced a function especially for this. It was
1f77f049 4688always available in @theglibc{} in some form but never officially
7b4161bb
UD
4689exported.
4690
7b4161bb 4691@deftypefun void _flushlbf (void)
d08a7e4c 4692@standards{GNU, stdio_ext.h}
171e9210 4693@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
7b4161bb
UD
4694The @code{_flushlbf} function flushes all line buffered streams
4695currently opened.
4696
4697This function is declared in the @file{stdio_ext.h} header.
4698@end deftypefun
4699
28f540f4
RM
4700@strong{Compatibility Note:} Some brain-damaged operating systems have
4701been known to be so thoroughly fixated on line-oriented input and output
4702that flushing a line buffered stream causes a newline to be written!
4703Fortunately, this ``feature'' seems to be becoming less common. You do
a7a93d50 4704not need to worry about this with @theglibc{}.
28f540f4 4705
7b4161bb
UD
4706In some situations it might be useful to not flush the output pending
4707for a stream but instead simply forget it. If transmission is costly
4708and the output is not needed anymore this is valid reasoning. In this
4709situation a non-standard function introduced in Solaris and available in
1f77f049 4710@theglibc{} can be used.
7b4161bb 4711
7b4161bb 4712@deftypefun void __fpurge (FILE *@var{stream})
d08a7e4c 4713@standards{GNU, stdio_ext.h}
171e9210 4714@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acunsafe{@acucorrupt{}}}
7b4161bb
UD
4715The @code{__fpurge} function causes the buffer of the stream
4716@var{stream} to be emptied. If the stream is currently in read mode all
4717input in the buffer is lost. If the stream is in output mode the
4718buffered output is not written to the device (or whatever other
c703cd7a 4719underlying storage) and the buffer is cleared.
7b4161bb
UD
4720
4721This function is declared in @file{stdio_ext.h}.
4722@end deftypefun
28f540f4
RM
4723
4724@node Controlling Buffering
4725@subsection Controlling Which Kind of Buffering
4726
4727After opening a stream (but before any other operations have been
4728performed on it), you can explicitly specify what kind of buffering you
4729want it to have using the @code{setvbuf} function.
4730@cindex buffering, controlling
4731
4732The facilities listed in this section are declared in the header
4733file @file{stdio.h}.
4734@pindex stdio.h
4735
28f540f4 4736@deftypefun int setvbuf (FILE *@var{stream}, char *@var{buf}, int @var{mode}, size_t @var{size})
d08a7e4c 4737@standards{ISO, stdio.h}
171e9210 4738@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4739This function is used to specify that the stream @var{stream} should
4740have the buffering mode @var{mode}, which can be either @code{_IOFBF}
4741(for full buffering), @code{_IOLBF} (for line buffering), or
4742@code{_IONBF} (for unbuffered input/output).
4743
4744If you specify a null pointer as the @var{buf} argument, then @code{setvbuf}
4745allocates a buffer itself using @code{malloc}. This buffer will be freed
4746when you close the stream.
4747
4748Otherwise, @var{buf} should be a character array that can hold at least
4749@var{size} characters. You should not free the space for this array as
4750long as the stream remains open and this array remains its buffer. You
4751should usually either allocate it statically, or @code{malloc}
4752(@pxref{Unconstrained Allocation}) the buffer. Using an automatic array
4753is not a good idea unless you close the file before exiting the block
4754that declares the array.
4755
4756While the array remains a stream buffer, the stream I/O functions will
4757use the buffer for their internal purposes. You shouldn't try to access
4758the values in the array directly while the stream is using it for
4759buffering.
4760
4761The @code{setvbuf} function returns zero on success, or a nonzero value
4762if the value of @var{mode} is not valid or if the request could not
4763be honored.
4764@end deftypefun
4765
28f540f4 4766@deftypevr Macro int _IOFBF
d08a7e4c 4767@standards{ISO, stdio.h}
28f540f4
RM
4768The value of this macro is an integer constant expression that can be
4769used as the @var{mode} argument to the @code{setvbuf} function to
4770specify that the stream should be fully buffered.
4771@end deftypevr
4772
28f540f4 4773@deftypevr Macro int _IOLBF
d08a7e4c 4774@standards{ISO, stdio.h}
28f540f4
RM
4775The value of this macro is an integer constant expression that can be
4776used as the @var{mode} argument to the @code{setvbuf} function to
4777specify that the stream should be line buffered.
4778@end deftypevr
4779
28f540f4 4780@deftypevr Macro int _IONBF
d08a7e4c 4781@standards{ISO, stdio.h}
28f540f4
RM
4782The value of this macro is an integer constant expression that can be
4783used as the @var{mode} argument to the @code{setvbuf} function to
4784specify that the stream should be unbuffered.
4785@end deftypevr
4786
28f540f4 4787@deftypevr Macro int BUFSIZ
d08a7e4c 4788@standards{ISO, stdio.h}
28f540f4
RM
4789The value of this macro is an integer constant expression that is good
4790to use for the @var{size} argument to @code{setvbuf}. This value is
4791guaranteed to be at least @code{256}.
4792
4793The value of @code{BUFSIZ} is chosen on each system so as to make stream
19c3f208 4794I/O efficient. So it is a good idea to use @code{BUFSIZ} as the size
28f540f4
RM
4795for the buffer when you call @code{setvbuf}.
4796
4797Actually, you can get an even better value to use for the buffer size
4798by means of the @code{fstat} system call: it is found in the
4799@code{st_blksize} field of the file attributes. @xref{Attribute Meanings}.
4800
4801Sometimes people also use @code{BUFSIZ} as the allocation size of
4802buffers used for related purposes, such as strings used to receive a
4803line of input with @code{fgets} (@pxref{Character Input}). There is no
4804particular reason to use @code{BUFSIZ} for this instead of any other
4805integer, except that it might lead to doing I/O in chunks of an
4806efficient size.
4807@end deftypevr
4808
28f540f4 4809@deftypefun void setbuf (FILE *@var{stream}, char *@var{buf})
d08a7e4c 4810@standards{ISO, stdio.h}
171e9210 4811@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4812If @var{buf} is a null pointer, the effect of this function is
4813equivalent to calling @code{setvbuf} with a @var{mode} argument of
4814@code{_IONBF}. Otherwise, it is equivalent to calling @code{setvbuf}
4815with @var{buf}, and a @var{mode} of @code{_IOFBF} and a @var{size}
4816argument of @code{BUFSIZ}.
4817
4818The @code{setbuf} function is provided for compatibility with old code;
4819use @code{setvbuf} in all new programs.
4820@end deftypefun
4821
28f540f4 4822@deftypefun void setbuffer (FILE *@var{stream}, char *@var{buf}, size_t @var{size})
d08a7e4c 4823@standards{BSD, stdio.h}
171e9210 4824@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4825If @var{buf} is a null pointer, this function makes @var{stream} unbuffered.
4826Otherwise, it makes @var{stream} fully buffered using @var{buf} as the
4827buffer. The @var{size} argument specifies the length of @var{buf}.
4828
4829This function is provided for compatibility with old BSD code. Use
4830@code{setvbuf} instead.
4831@end deftypefun
4832
28f540f4 4833@deftypefun void setlinebuf (FILE *@var{stream})
d08a7e4c 4834@standards{BSD, stdio.h}
171e9210 4835@safety{@prelim{}@mtsafe{}@asunsafe{@asucorrupt{}}@acunsafe{@aculock{} @acucorrupt{}}}
28f540f4
RM
4836This function makes @var{stream} be line buffered, and allocates the
4837buffer for you.
4838
4839This function is provided for compatibility with old BSD code. Use
4840@code{setvbuf} instead.
4841@end deftypefun
4842
7b4161bb 4843It is possible to query whether a given stream is line buffered or not
1f77f049
JM
4844using a non-standard function introduced in Solaris and available in
4845@theglibc{}.
7b4161bb 4846
7b4161bb 4847@deftypefun int __flbf (FILE *@var{stream})
d08a7e4c 4848@standards{GNU, stdio_ext.h}
171e9210 4849@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
7b4161bb
UD
4850The @code{__flbf} function will return a nonzero value in case the
4851stream @var{stream} is line buffered. Otherwise the return value is
4852zero.
4853
4854This function is declared in the @file{stdio_ext.h} header.
4855@end deftypefun
4856
4857Two more extensions allow to determine the size of the buffer and how
4858much of it is used. These functions were also introduced in Solaris.
4859
7b4161bb 4860@deftypefun size_t __fbufsize (FILE *@var{stream})
d08a7e4c 4861@standards{GNU, stdio_ext.h}
171e9210 4862@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
7b4161bb
UD
4863The @code{__fbufsize} function return the size of the buffer in the
4864stream @var{stream}. This value can be used to optimize the use of the
4865stream.
4866
4867This function is declared in the @file{stdio_ext.h} header.
4868@end deftypefun
4869
cc6e48bc 4870@deftypefun size_t __fpending (FILE *@var{stream})
d08a7e4c 4871@standards{GNU, stdio_ext.h}
171e9210 4872@safety{@prelim{}@mtsafe{@mtsrace{:stream}}@asunsafe{@asucorrupt{}}@acsafe{}}
cc6e48bc 4873The @code{__fpending}
f126ef67 4874function returns the number of bytes currently in the output buffer.
c703cd7a 4875For wide-oriented streams the measuring unit is wide characters. This
f126ef67 4876function should not be used on buffers in read mode or opened read-only.
7b4161bb
UD
4877
4878This function is declared in the @file{stdio_ext.h} header.
4879@end deftypefun
4880
28f540f4
RM
4881@node Other Kinds of Streams
4882@section Other Kinds of Streams
4883
1f77f049 4884@Theglibc{} provides ways for you to define additional kinds of
28f540f4
RM
4885streams that do not necessarily correspond to an open file.
4886
4887One such type of stream takes input from or writes output to a string.
4888These kinds of streams are used internally to implement the
4889@code{sprintf} and @code{sscanf} functions. You can also create such a
4890stream explicitly, using the functions described in @ref{String Streams}.
4891
4892More generally, you can define streams that do input/output to arbitrary
4893objects using functions supplied by your program. This protocol is
4894discussed in @ref{Custom Streams}.
4895
4896@strong{Portability Note:} The facilities described in this section are
4897specific to GNU. Other systems or C implementations might or might not
4898provide equivalent functionality.
4899
4900@menu
19c3f208 4901* String Streams:: Streams that get data from or put data in
162ba701 4902 a string or memory buffer.
28f540f4 4903* Custom Streams:: Defining your own streams with an arbitrary
162ba701 4904 input data source and/or output data sink.
28f540f4
RM
4905@end menu
4906
4907@node String Streams
4908@subsection String Streams
4909
4910@cindex stream, for I/O to a string
4911@cindex string stream
4912The @code{fmemopen} and @code{open_memstream} functions allow you to do
4913I/O to a string or memory buffer. These facilities are declared in
4914@file{stdio.h}.
4915@pindex stdio.h
4916
28f540f4 4917@deftypefun {FILE *} fmemopen (void *@var{buf}, size_t @var{size}, const char *@var{opentype})
d08a7e4c 4918@standards{GNU, stdio.h}
171e9210
AO
4919@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
4920@c Unlike open_memstream, fmemopen does (indirectly) call _IO_link_in,
4921@c bringing with it additional potential for async trouble with
4922@c list_all_lock.
28f540f4
RM
4923This function opens a stream that allows the access specified by the
4924@var{opentype} argument, that reads from or writes to the buffer specified
4925by the argument @var{buf}. This array must be at least @var{size} bytes long.
4926
4927If you specify a null pointer as the @var{buf} argument, @code{fmemopen}
04b9968b
UD
4928dynamically allocates an array @var{size} bytes long (as with @code{malloc};
4929@pxref{Unconstrained Allocation}). This is really only useful
28f540f4
RM
4930if you are going to write things to the buffer and then read them back
4931in again, because you have no way of actually getting a pointer to the
4932buffer (for this, try @code{open_memstream}, below). The buffer is
417d6b34 4933freed when the stream is closed.
28f540f4
RM
4934
4935The argument @var{opentype} is the same as in @code{fopen}
8b7fb588 4936(@pxref{Opening Streams}). If the @var{opentype} specifies
28f540f4
RM
4937append mode, then the initial file position is set to the first null
4938character in the buffer. Otherwise the initial file position is at the
4939beginning of the buffer.
4940
4941When a stream open for writing is flushed or closed, a null character
4942(zero byte) is written at the end of the buffer if it fits. You
4943should add an extra byte to the @var{size} argument to account for this.
4944Attempts to write more than @var{size} bytes to the buffer result
4945in an error.
4946
4947For a stream open for reading, null characters (zero bytes) in the
4948buffer do not count as ``end of file''. Read operations indicate end of
4949file only when the file position advances past @var{size} bytes. So, if
4950you want to read characters from a null-terminated string, you should
4951supply the length of the string as the @var{size} argument.
4952@end deftypefun
4953
4954Here is an example of using @code{fmemopen} to create a stream for
4955reading from a string:
4956
4957@smallexample
4958@include memopen.c.texi
4959@end smallexample
4960
4961This program produces the following output:
4962
4963@smallexample
4964Got f
4965Got o
4966Got o
4967Got b
4968Got a
4969Got r
4970@end smallexample
4971
28f540f4 4972@deftypefun {FILE *} open_memstream (char **@var{ptr}, size_t *@var{sizeloc})
d08a7e4c 4973@standards{GNU, stdio.h}
171e9210 4974@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}}
28f540f4 4975This function opens a stream for writing to a buffer. The buffer is
29402b12
RM
4976allocated dynamically and grown as necessary, using @code{malloc}.
4977After you've closed the stream, this buffer is your responsibility to
4978clean up using @code{free} or @code{realloc}. @xref{Unconstrained Allocation}.
28f540f4
RM
4979
4980When the stream is closed with @code{fclose} or flushed with
4981@code{fflush}, the locations @var{ptr} and @var{sizeloc} are updated to
4982contain the pointer to the buffer and its size. The values thus stored
4983remain valid only as long as no further output on the stream takes
4984place. If you do more output, you must flush the stream again to store
4985new values before you use them again.
4986
4987A null character is written at the end of the buffer. This null character
4988is @emph{not} included in the size value stored at @var{sizeloc}.
4989
a5a0310d
UD
4990You can move the stream's file position with @code{fseek} or
4991@code{fseeko} (@pxref{File Positioning}). Moving the file position past
4992the end of the data already written fills the intervening space with
4993zeroes.
28f540f4
RM
4994@end deftypefun
4995
4996Here is an example of using @code{open_memstream}:
4997
4998@smallexample
4999@include memstrm.c.texi
5000@end smallexample
5001
5002This program produces the following output:
5003
5004@smallexample
5005buf = `hello', size = 5
5006buf = `hello, world', size = 12
5007@end smallexample
5008
28f540f4
RM
5009@node Custom Streams
5010@subsection Programming Your Own Custom Streams
5011@cindex custom streams
5012@cindex programming your own streams
5013
5014This section describes how you can make a stream that gets input from an
5015arbitrary data source or writes output to an arbitrary data sink
52cea457
UD
5016programmed by you. We call these @dfn{custom streams}. The functions
5017and types described here are all GNU extensions.
28f540f4
RM
5018
5019@c !!! this does not talk at all about the higher-level hooks
5020
5021@menu
5022* Streams and Cookies:: The @dfn{cookie} records where to fetch or
162ba701 5023 store data that is read or written.
28f540f4 5024* Hook Functions:: How you should define the four @dfn{hook
162ba701 5025 functions} that a custom stream needs.
28f540f4
RM
5026@end menu
5027
5028@node Streams and Cookies
5029@subsubsection Custom Streams and Cookies
5030@cindex cookie, for custom stream
5031
5032Inside every custom stream is a special object called the @dfn{cookie}.
5033This is an object supplied by you which records where to fetch or store
5034the data read or written. It is up to you to define a data type to use
5035for the cookie. The stream functions in the library never refer
5036directly to its contents, and they don't even know what the type is;
5037they record its address with type @code{void *}.
5038
5039To implement a custom stream, you must specify @emph{how} to fetch or
5040store the data in the specified place. You do this by defining
5041@dfn{hook functions} to read, write, change ``file position'', and close
5042the stream. All four of these functions will be passed the stream's
5043cookie so they can tell where to fetch or store the data. The library
5044functions don't know what's inside the cookie, but your functions will
5045know.
5046
5047When you create a custom stream, you must specify the cookie pointer,
19c3f208 5048and also the four hook functions stored in a structure of type
28f540f4
RM
5049@code{cookie_io_functions_t}.
5050
5051These facilities are declared in @file{stdio.h}.
5052@pindex stdio.h
5053
28f540f4 5054@deftp {Data Type} {cookie_io_functions_t}
d08a7e4c 5055@standards{GNU, stdio.h}
19c3f208 5056This is a structure type that holds the functions that define the
28f540f4
RM
5057communications protocol between the stream and its cookie. It has
5058the following members:
5059
5060@table @code
5061@item cookie_read_function_t *read
5062This is the function that reads data from the cookie. If the value is a
f2ea0f5b 5063null pointer instead of a function, then read operations on this stream
28f540f4
RM
5064always return @code{EOF}.
5065
5066@item cookie_write_function_t *write
5067This is the function that writes data to the cookie. If the value is a
5068null pointer instead of a function, then data written to the stream is
5069discarded.
5070
5071@item cookie_seek_function_t *seek
5072This is the function that performs the equivalent of file positioning on
5073the cookie. If the value is a null pointer instead of a function, calls
a5a0310d
UD
5074to @code{fseek} or @code{fseeko} on this stream can only seek to
5075locations within the buffer; any attempt to seek outside the buffer will
5076return an @code{ESPIPE} error.
28f540f4
RM
5077
5078@item cookie_close_function_t *close
5079This function performs any appropriate cleanup on the cookie when
5080closing the stream. If the value is a null pointer instead of a
5081function, nothing special is done to close the cookie when the stream is
5082closed.
5083@end table
5084@end deftp
5085
28f540f4 5086@deftypefun {FILE *} fopencookie (void *@var{cookie}, const char *@var{opentype}, cookie_io_functions_t @var{io-functions})
d08a7e4c 5087@standards{GNU, stdio.h}
171e9210 5088@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@acsmem{} @aculock{}}}
28f540f4
RM
5089This function actually creates the stream for communicating with the
5090@var{cookie} using the functions in the @var{io-functions} argument.
5091The @var{opentype} argument is interpreted as for @code{fopen};
5092see @ref{Opening Streams}. (But note that the ``truncate on
5093open'' option is ignored.) The new stream is fully buffered.
5094
5095The @code{fopencookie} function returns the newly created stream, or a null
5096pointer in case of an error.
5097@end deftypefun
5098
5099@node Hook Functions
5100@subsubsection Custom Stream Hook Functions
5101@cindex hook functions (of custom streams)
5102
5103Here are more details on how you should define the four hook functions
5104that a custom stream needs.
5105
5106You should define the function to read data from the cookie as:
5107
5108@smallexample
62ecda3d 5109ssize_t @var{reader} (void *@var{cookie}, char *@var{buffer}, size_t @var{size})
28f540f4
RM
5110@end smallexample
5111
5112This is very similar to the @code{read} function; see @ref{I/O
5113Primitives}. Your function should transfer up to @var{size} bytes into
5114the @var{buffer}, and return the number of bytes read, or zero to
5115indicate end-of-file. You can return a value of @code{-1} to indicate
5116an error.
5117
5118You should define the function to write data to the cookie as:
5119
5120@smallexample
62ecda3d 5121ssize_t @var{writer} (void *@var{cookie}, const char *@var{buffer}, size_t @var{size})
28f540f4
RM
5122@end smallexample
5123
5124This is very similar to the @code{write} function; see @ref{I/O
5125Primitives}. Your function should transfer up to @var{size} bytes from
5126the buffer, and return the number of bytes written. You can return a
247c3ede
PB
5127value of @code{0} to indicate an error. You must not return any
5128negative value.
28f540f4
RM
5129
5130You should define the function to perform seek operations on the cookie
5131as:
5132
5133@smallexample
c1e36819 5134int @var{seeker} (void *@var{cookie}, off64_t *@var{position}, int @var{whence})
28f540f4
RM
5135@end smallexample
5136
5137For this function, the @var{position} and @var{whence} arguments are
c1e36819 5138interpreted as for @code{fgetpos}; see @ref{Portable Positioning}.
28f540f4 5139
19c3f208 5140After doing the seek operation, your function should store the resulting
28f540f4
RM
5141file position relative to the beginning of the file in @var{position}.
5142Your function should return a value of @code{0} on success and @code{-1}
5143to indicate an error.
5144
5145You should define the function to do cleanup operations on the cookie
5146appropriate for closing the stream as:
5147
5148@smallexample
5149int @var{cleaner} (void *@var{cookie})
5150@end smallexample
5151
5152Your function should return @code{-1} to indicate an error, and @code{0}
5153otherwise.
5154
fff763a5 5155@deftp {Data Type} cookie_read_function_t
d08a7e4c 5156@standards{GNU, stdio.h}
28f540f4
RM
5157This is the data type that the read function for a custom stream should have.
5158If you declare the function as shown above, this is the type it will have.
5159@end deftp
5160
fff763a5 5161@deftp {Data Type} cookie_write_function_t
d08a7e4c 5162@standards{GNU, stdio.h}
28f540f4
RM
5163The data type of the write function for a custom stream.
5164@end deftp
5165
fff763a5 5166@deftp {Data Type} cookie_seek_function_t
d08a7e4c 5167@standards{GNU, stdio.h}
28f540f4
RM
5168The data type of the seek function for a custom stream.
5169@end deftp
5170
fff763a5 5171@deftp {Data Type} cookie_close_function_t
d08a7e4c 5172@standards{GNU, stdio.h}
28f540f4
RM
5173The data type of the close function for a custom stream.
5174@end deftp
5175
5176@ignore
5177Roland says:
5178
5179@quotation
5180There is another set of functions one can give a stream, the
5181input-room and output-room functions. These functions must
5182understand stdio internals. To describe how to use these
5183functions, you also need to document lots of how stdio works
5184internally (which isn't relevant for other uses of stdio).
5185Perhaps I can write an interface spec from which you can write
5186good documentation. But it's pretty complex and deals with lots
5187of nitty-gritty details. I think it might be better to let this
5188wait until the rest of the manual is more done and polished.
5189@end quotation
5190@end ignore
5191
5192@c ??? This section could use an example.
0501d603
UD
5193
5194
5195@node Formatted Messages
5196@section Formatted Messages
5197@cindex formatted messages
5198
5199On systems which are based on System V messages of programs (especially
5200the system tools) are printed in a strict form using the @code{fmtmsg}
5201function. The uniformity sometimes helps the user to interpret messages
cf29ffbe 5202and the strictness tests of the @code{fmtmsg} function ensure that the
0501d603
UD
5203programmer follows some minimal requirements.
5204
5205@menu
5206* Printing Formatted Messages:: The @code{fmtmsg} function.
5207* Adding Severity Classes:: Add more severity classes.
5208* Example:: How to use @code{fmtmsg} and @code{addseverity}.
5209@end menu
5210
5211
5212@node Printing Formatted Messages
5213@subsection Printing Formatted Messages
5214
5215Messages can be printed to standard error and/or to the console. To
cf29ffbe 5216select the destination the programmer can use the following two values,
0501d603
UD
5217bitwise OR combined if wanted, for the @var{classification} parameter of
5218@code{fmtmsg}:
5219
5220@vtable @code
5221@item MM_PRINT
5222Display the message in standard error.
5223@item MM_CONSOLE
5224Display the message on the system console.
5225@end vtable
5226
f2ea0f5b 5227The erroneous piece of the system can be signalled by exactly one of the
0501d603
UD
5228following values which also is bitwise ORed with the
5229@var{classification} parameter to @code{fmtmsg}:
5230
5231@vtable @code
5232@item MM_HARD
5233The source of the condition is some hardware.
5234@item MM_SOFT
5235The source of the condition is some software.
5236@item MM_FIRM
5237The source of the condition is some firmware.
5238@end vtable
5239
5240A third component of the @var{classification} parameter to @code{fmtmsg}
5241can describe the part of the system which detects the problem. This is
5242done by using exactly one of the following values:
5243
5244@vtable @code
5245@item MM_APPL
f2ea0f5b 5246The erroneous condition is detected by the application.
0501d603 5247@item MM_UTIL
f2ea0f5b 5248The erroneous condition is detected by a utility.
0501d603 5249@item MM_OPSYS
f2ea0f5b 5250The erroneous condition is detected by the operating system.
0501d603
UD
5251@end vtable
5252
5253A last component of @var{classification} can signal the results of this
5254message. Exactly one of the following values can be used:
5255
5256@vtable @code
5257@item MM_RECOVER
5258It is a recoverable error.
5259@item MM_NRECOV
5260It is a non-recoverable error.
5261@end vtable
5262
0501d603 5263@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 5264@standards{XPG, fmtmsg.h}
171e9210 5265@safety{@prelim{}@mtsafe{}@asunsafe{@asulock{}}@acsafe{}}
0501d603
UD
5266Display a message described by its parameters on the device(s) specified
5267in the @var{classification} parameter. The @var{label} parameter
5268identifies the source of the message. The string should consist of two
5269colon separated parts where the first part has not more than 10 and the
04b9968b 5270second part not more than 14 characters. The @var{text} parameter
f2ea0f5b 5271describes the condition of the error, the @var{action} parameter possible
0501d603
UD
5272steps to recover from the error and the @var{tag} parameter is a
5273reference to the online documentation where more information can be
5274found. It should contain the @var{label} value and a unique
5275identification number.
5276
cf29ffbe 5277Each of the parameters can be a special value which means this value
0501d603
UD
5278is to be omitted. The symbolic names for these values are:
5279
5280@vtable @code
5281@item MM_NULLLBL
5282Ignore @var{label} parameter.
5283@item MM_NULLSEV
5284Ignore @var{severity} parameter.
5285@item MM_NULLMC
5286Ignore @var{classification} parameter. This implies that nothing is
5287actually printed.
5288@item MM_NULLTXT
5289Ignore @var{text} parameter.
5290@item MM_NULLACT
5291Ignore @var{action} parameter.
5292@item MM_NULLTAG
5293Ignore @var{tag} parameter.
5294@end vtable
5295
cf29ffbe 5296There is another way certain fields can be omitted from the output to
0501d603 5297standard error. This is described below in the description of
0bc93a2f 5298environment variables influencing the behavior.
0501d603
UD
5299
5300The @var{severity} parameter can have one of the values in the following
5301table:
5302@cindex severity class
5303
5304@vtable @code
5305@item MM_NOSEV
5306Nothing is printed, this value is the same as @code{MM_NULLSEV}.
5307@item MM_HALT
5308This value is printed as @code{HALT}.
5309@item MM_ERROR
5310This value is printed as @code{ERROR}.
5311@item MM_WARNING
5312This value is printed as @code{WARNING}.
5313@item MM_INFO
5314This value is printed as @code{INFO}.
5315@end vtable
5316
5317The numeric value of these five macros are between @code{0} and
5318@code{4}. Using the environment variable @code{SEV_LEVEL} or using the
5319@code{addseverity} function one can add more severity levels with their
5320corresponding string to print. This is described below
5321(@pxref{Adding Severity Classes}).
5322
5323@noindent
5324If no parameter is ignored the output looks like this:
5325
5326@smallexample
5327@var{label}: @var{severity-string}: @var{text}
5328TO FIX: @var{action} @var{tag}
5329@end smallexample
5330
5331The colons, new line characters and the @code{TO FIX} string are
5332inserted if necessary, i.e., if the corresponding parameter is not
5333ignored.
5334
5335This function is specified in the X/Open Portability Guide. It is also
04b9968b 5336available on all systems derived from System V.
0501d603 5337
cf29ffbe 5338The function returns the value @code{MM_OK} if no error occurred. If
0501d603
UD
5339only the printing to standard error failed, it returns @code{MM_NOMSG}.
5340If printing to the console fails, it returns @code{MM_NOCON}. If
cf29ffbe 5341nothing is printed @code{MM_NOTOK} is returned. Among situations where
0501d603
UD
5342all outputs fail this last value is also returned if a parameter value
5343is incorrect.
5344@end deftypefun
5345
0bc93a2f 5346There are two environment variables which influence the behavior of
0501d603
UD
5347@code{fmtmsg}. The first is @code{MSGVERB}. It is used to control the
5348output actually happening on standard error (@emph{not} the console
04b9968b 5349output). Each of the five fields can explicitly be enabled. To do
0501d603 5350this the user has to put the @code{MSGVERB} variable with a format like
cf29ffbe 5351the following in the environment before calling the @code{fmtmsg} function
0501d603
UD
5352the first time:
5353
5354@smallexample
95fdc6a0 5355MSGVERB=@var{keyword}[:@var{keyword}[:@dots{}]]
0501d603
UD
5356@end smallexample
5357
5358Valid @var{keyword}s are @code{label}, @code{severity}, @code{text},
5359@code{action}, and @code{tag}. If the environment variable is not given
5360or is the empty string, a not supported keyword is given or the value is
5361somehow else invalid, no part of the message is masked out.
5362
0bc93a2f 5363The second environment variable which influences the behavior of
0501d603 5364@code{fmtmsg} is @code{SEV_LEVEL}. This variable and the change in the
0bc93a2f 5365behavior of @code{fmtmsg} is not specified in the X/Open Portability
0501d603 5366Guide. It is available in System V systems, though. It can be used to
cf29ffbe 5367introduce new severity levels. By default, only the five severity levels
0501d603
UD
5368described above are available. Any other numeric value would make
5369@code{fmtmsg} print nothing.
5370
5371If the user puts @code{SEV_LEVEL} with a format like
5372
5373@smallexample
95fdc6a0 5374SEV_LEVEL=[@var{description}[:@var{description}[:@dots{}]]]
0501d603
UD
5375@end smallexample
5376
5377@noindent
5378in the environment of the process before the first call to
5379@code{fmtmsg}, where @var{description} has a value of the form
5380
5381@smallexample
5382@var{severity-keyword},@var{level},@var{printstring}
5383@end smallexample
5384
5385The @var{severity-keyword} part is not used by @code{fmtmsg} but it has
5386to be present. The @var{level} part is a string representation of a
5387number. The numeric value must be a number greater than 4. This value
5388must be used in the @var{severity} parameter of @code{fmtmsg} to select
5389this class. It is not possible to overwrite any of the predefined
5390classes. The @var{printstring} is the string printed when a message of
5391this class is processed by @code{fmtmsg} (see above, @code{fmtsmg} does
5392not print the numeric value but instead the string representation).
5393
5394
5395@node Adding Severity Classes
5396@subsection Adding Severity Classes
5397@cindex severity class
5398
04b9968b 5399There is another possibility to introduce severity classes besides using
0501d603
UD
5400the environment variable @code{SEV_LEVEL}. This simplifies the task of
5401introducing new classes in a running program. One could use the
5402@code{setenv} or @code{putenv} function to set the environment variable,
cf29ffbe 5403but this is toilsome.
0501d603
UD
5404
5405@deftypefun int addseverity (int @var{severity}, const char *@var{string})
171e9210 5406@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}}
04b9968b 5407This function allows the introduction of new severity classes which can be
0501d603
UD
5408addressed by the @var{severity} parameter of the @code{fmtmsg} function.
5409The @var{severity} parameter of @code{addseverity} must match the value
04b9968b 5410for the parameter with the same name of @code{fmtmsg}, and @var{string}
0501d603
UD
5411is the string printed in the actual messages instead of the numeric
5412value.
5413
5414If @var{string} is @code{NULL} the severity class with the numeric value
5415according to @var{severity} is removed.
5416
cf29ffbe
UD
5417It is not possible to overwrite or remove one of the default severity
5418classes. All calls to @code{addseverity} with @var{severity} set to one
5419of the values for the default classes will fail.
5420
0501d603
UD
5421The return value is @code{MM_OK} if the task was successfully performed.
5422If the return value is @code{MM_NOTOK} something went wrong. This could
5423mean that no more memory is available or a class is not available when
5424it has to be removed.
5425
5426This function is not specified in the X/Open Portability Guide although
cf29ffbe 5427the @code{fmtsmg} function is. It is available on System V systems.
0501d603
UD
5428@end deftypefun
5429
5430
5431@node Example
5432@subsection How to use @code{fmtmsg} and @code{addseverity}
5433
c703cd7a 5434Here is a simple example program to illustrate the use of both
0501d603
UD
5435functions described in this section.
5436
5437@smallexample
5438@include fmtmsgexpl.c.texi
5439@end smallexample
5440
04b9968b
UD
5441The second call to @code{fmtmsg} illustrates a use of this function as
5442it usually occurs on System V systems, which heavily use this function.
5443It seems worthwhile to give a short explanation here of how this system
5444works on System V. The value of the
0bc93a2f 5445@var{label} field (@code{UX:cat}) says that the error occurred in the
0501d603
UD
5446Unix program @code{cat}. The explanation of the error follows and the
5447value for the @var{action} parameter is @code{"refer to manual"}. One
04b9968b 5448could be more specific here, if necessary. The @var{tag} field contains,
0501d603
UD
5449as proposed above, the value of the string given for the @var{label}
5450parameter, and additionally a unique ID (@code{001} in this case). For
5451a GNU environment this string could contain a reference to the
5452corresponding node in the Info page for the program.
5453
5454@noindent
5455Running this program without specifying the @code{MSGVERB} and
5456@code{SEV_LEVEL} function produces the following output:
5457
5458@smallexample
5459UX:cat: NOTE2: invalid syntax
5460TO FIX: refer to manual UX:cat:001
5461@end smallexample
5462
5463We see the different fields of the message and how the extra glue (the
c703cd7a 5464colons and the @code{TO FIX} string) is printed. But only one of the
0501d603
UD
5465three calls to @code{fmtmsg} produced output. The first call does not
5466print anything because the @var{label} parameter is not in the correct
8b7fb588
UD
5467form. The string must contain two fields, separated by a colon
5468(@pxref{Printing Formatted Messages}). The third @code{fmtmsg} call
0501d603
UD
5469produced no output since the class with the numeric value @code{6} is
5470not defined. Although a class with numeric value @code{5} is also not
04b9968b 5471defined by default, the call to @code{addseverity} introduces it and
0ea554bf 5472the second call to @code{fmtmsg} produces the above output.
0501d603
UD
5473
5474When we change the environment of the program to contain
5475@code{SEV_LEVEL=XXX,6,NOTE} when running it we get a different result:
5476
5477@smallexample
5478UX:cat: NOTE2: invalid syntax
5479TO FIX: refer to manual UX:cat:001
5480label:foo: NOTE: text
5481TO FIX: action tag
5482@end smallexample
5483
04b9968b 5484Now the third call to @code{fmtmsg} produced some output and we see how
0501d603
UD
5485the string @code{NOTE} from the environment variable appears in the
5486message.
5487
04b9968b 5488Now we can reduce the output by specifying which fields we are
0501d603
UD
5489interested in. If we additionally set the environment variable
5490@code{MSGVERB} to the value @code{severity:label:action} we get the
5491following output:
5492
5493@smallexample
5494UX:cat: NOTE2
5495TO FIX: refer to manual
5496label:foo: NOTE
5497TO FIX: action
5498@end smallexample
5499
5500@noindent
5501I.e., the output produced by the @var{text} and the @var{tag} parameters
cf29ffbe 5502to @code{fmtmsg} vanished. Please also note that now there is no colon
0501d603 5503after the @code{NOTE} and @code{NOTE2} strings in the output. This is
04b9968b 5504not necessary since there is no more output on this line because the text
0501d603 5505is missing.