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