Subversion Repositories planix.SVN

Rev

Rev 22 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
.TH FPRINTF 2
2
.SH NAME
3
fprintf, printf, sprintf, snprintf, vfprintf, vprintf, vsprintf, vsnprintf \- print formatted output
4
.SH SYNOPSIS
5
.B #include <u.h>
6
.br
7
.B #include <stdio.h>
8
.PP
9
.B
10
int fprintf(FILE *f, char *format, ...)
11
.PP
12
.B
13
int printf(char *format, ...)
14
.PP
15
.B
16
int sprintf(char *s, char *format, ...)
17
.PP
18
.B
19
int snprintf(char *s, int n, char *format, ...)
20
.PP
21
.B
22
int vfprintf(FILE *f, char *format, va_list args)
23
.PP
24
.B
25
int vprintf(char *format, va_list args)
26
.PP
27
.B
28
int vsprintf(char *s, char *format, va_list args)
29
.PP
30
.B
31
int vsnprintf(char *s, int n, char *format, va_list args)
32
.SH DESCRIPTION
33
.I Fprintf
34
places output on the named output stream
35
.I f
36
(see
37
.IR fopen (2)).
38
.I Printf
39
places output on the standard output stream
40
.IR stdout .
41
.I Sprintf
42
places output
43
followed by the null character
44
.RB ( \e0 )
45
in consecutive bytes starting at
46
.IR s ;
47
it is the user's responsibility to ensure that
48
enough storage is available.
49
.I Snprintf
50
is like 
51
.I sprintf
52
but writes at most 
53
.I n
54
bytes (including the null character)
55
into 
56
.IR s .
57
.IR Vfprintf ,
58
.IR vprintf ,
59
.IR vsnprintf ,
60
and
61
.I vsprintf
62
are the same, except the
63
.I args
64
argument is the argument list of the
65
calling function, and the effect is as if the calling function's
66
argument list from that point on is passed to the
67
.I printf
68
routines.
69
.PP
70
Each function returns the number of characters
71
transmitted (not including the
72
.B \e0
73
in the case of
74
.IR sprintf 
75
and friends),
76
or
77
a negative value if an output error was encountered.
78
.PP
79
These functions
80
convert, format, and print their
81
trailing arguments
82
under control of a
83
.IR format 
84
string.
85
The
86
.I format
87
contains two types of objects:
88
plain characters, which are simply copied to the
89
output stream,
90
and conversion specifications,
91
each of which results in fetching of
92
zero or more
93
arguments.
94
The results are undefined if there are arguments of the
95
wrong type or too few
96
arguments for the format.
97
If the format is exhausted while
98
arguments remain, the excess
99
are ignored.
100
.PP
101
Each conversion specification is introduced by
102
the character
103
.BR % .
104
After the
105
.BR % ,
106
the following
107
appear in sequence:
108
.PP
109
.RS
110
Zero or more
111
.IR flags ,
112
which modify the meaning of
113
the conversion specification.
114
.PP
115
An optional decimal digit string specifying a minimum
116
.IR "field width" .
117
If the converted value has fewer characters
118
than the field width, it will be padded with spaces on the
119
left (or right, if the left adjustment, described later, has been given)
120
to the field width.
121
.PP
122
An optional
123
.I precision\^
124
that gives
125
the minimum number of digits to appear for the
126
.BR d ,
127
.BR i ,
128
.BR o ,
129
.BR u ,
130
.BR x ,
131
and
132
.B X
133
conversions,
134
the number of digits to appear after the
135
decimal point for the
136
.BR e ,
137
.BR E ,
138
and
139
.B f
140
conversions,
141
the maximum number of significant digits
142
for the
143
.B g
144
and
145
.B G
146
conversions,
147
or the maximum number of characters
148
to be written from a string in
149
.B s
150
conversion.
151
The precision takes the form of a period
152
.RB ( \&. )
153
followed by an optional decimal integer;
154
if the integer is omitted, it is treated as zero.
155
.PP
156
An optional
157
.B h
158
specifying that a following
159
.BR d ,
160
.BR i ,
161
.BR o ,
162
.BR u ,
163
.BR x
164
or
165
.BR X
166
conversion specifier applies to a
167
.B short
168
.B int
169
or
170
.B unsigned
171
.B short
172
argument (the argument will have been promoted according to the integral
173
promotions, and its value shall be converted to
174
.B short
175
or
176
.B unsigned
177
.B short
178
before printing);
179
an optional
180
.B h
181
specifying that a following
182
.B n
183
conversion specifier applies to a pointer to a
184
.B short
185
argument;
186
an optional
187
.B l
188
(ell) specifying that a following
189
.BR d ,
190
.BR i ,
191
.BR o ,
192
.BR u ,
193
.BR x ,
194
or
195
.B X
196
conversion character applies to a
197
.B long
198
or
199
.B unsigned
200
.B long
201
argument;
202
an optional
203
.B l
204
specifying that a following
205
.B n
206
conversion specifier applies to a pointer to a
207
.B long
208
.B int
209
argument;
210
or an optional
211
.B L
212
specifying that a following
213
.BR e ,
214
.BR E ,
215
.BR f ,
216
.BR g ,
217
or
218
.B G
219
conversion specifier applies to a
220
.B long double
221
argument.
222
If an
223
.BR h ,
224
.BR l ,
225
or
226
.B L
227
appears with any other conversion specifier, the behavior is undefined.
228
.PP
229
A character that indicates the type of
230
conversion to be applied.
231
.RE
232
.PP
233
A field width or precision, or both, may be
234
indicated by an asterisk
235
.RB ( * )
236
instead of a digit string.
237
In this case, an
238
.B int
239
.I arg\^
240
supplies
241
the field width or precision.
242
The arguments specifying field width or precision, or both,
243
shall appear (in that order) before the argument (if any) to be converted.
244
A negative field width argument is taken as a
245
.B -
246
flag followed by a positive field width.
247
A negative precision is taken as if it were missing.
248
.PP
249
The flag characters and their meanings are:
250
.PD 0
251
.TP 10
252
.B -
253
The result of the conversion is left-justified within the field.
254
.TP
255
.B +
256
The result of a signed
257
conversion always begins with a sign
258
.RB ( +
259
or
260
.BR - ).
261
.TP
262
blank
263
If the first character of a signed conversion is not a sign,
264
or a signed conversion results in no characters,
265
a blank
266
is prefixed to the result.
267
This implies that if the blank and
268
.B +
269
flags both appear, the blank flag is ignored.
270
.TP
271
.B #
272
The result is to be converted
273
to an ``alternate form.''
274
For
275
.B o
276
conversion, it increases the precision to force
277
the first digit of the result to be a zero.
278
For
279
.B x
280
or
281
.B X
282
conversion, a non-zero result has
283
.B 0x
284
or
285
.B 0X
286
prefixed to it.
287
For
288
.BR e ,
289
.BR E ,
290
.BR f ,
291
.BR g ,
292
and
293
.B G
294
conversions, the result always contains a decimal point,
295
even if no digits follow the point (normally, a decimal point
296
appears in the result of these conversions only if a digit
297
follows it).
298
For
299
.B g
300
and
301
.B G
302
conversions, trailing zeros are
303
.I not\^
304
be removed from the result
305
as they normally are.
306
For other conversions, the behavior is undefined.
307
.TP
308
.B 0
309
For
310
.BR d ,
311
.BR i ,
312
.BR o ,
313
.BR u ,
314
.BR x ,
315
.BR X ,
316
.BR e ,
317
.BR E ,
318
.BR f ,
319
.BR g ,
320
and
321
.B G
322
conversions, leading zeros (following any indication of sign or base)
323
are used to pad the field width; no space padding is performed.
324
If the
325
.B 0
326
and
327
.B -
328
flags both appear, the
329
.B 0
330
flag will be ignored.
331
For
332
.BR d ,
333
.BR i ,
334
.BR o ,
335
.BR u ,
336
.BR x ,
337
and
338
.B X
339
conversions, if a precision is specified, the
340
.B 0
341
flag will be ignored.
342
For other conversions, the behavior is undefined.
343
.PD
344
.PP
345
The conversion characters
346
and their meanings are:
347
.PP
348
.PD 0
349
.TP 10
350
\fLd\fP,\fLo\fP,\fLu\fP,\fLx\fP,\fLX\fP
351
The integer
352
.I arg\^
353
is converted to signed decimal
354
.RB ( d
355
or
356
.BR i ),
357
unsigned octal
358
.RB ( o ),
359
unsigned decimal
360
.RB ( u ),
361
or unsigned hexadecimal notation
362
.RB ( x
363
or
364
.BR X );
365
the letters
366
.B abcdef
367
are used for
368
.B x
369
conversion and the letters
370
.B ABCDEF
371
for
372
.B X
373
conversion.
374
The precision specifies the minimum number of digits
375
to appear; if the value being converted can be represented
376
in fewer digits, it is expanded with leading zeros.
377
The default precision is 1.
378
The result of converting a zero value with a precision
379
of zero is no characters.
380
.TP
381
.BR f
382
The 
383
.B double
384
argument is converted to decimal notation
385
in the style
386
[\-]\fIddd\fL.\fIddd\fR,
387
where the number of digits after the decimal point
388
is equal to the precision specification.
389
If the precision
390
is missing,
391
it is taken as 6;
392
if the precision is explicitly
393
.LR 0 ,
394
no decimal point appears.
395
.TP
396
.BR e , E
397
The
398
.B double
399
argument is converted in the style
400
[\-]\fId\fL.\fIddd\fLe\fRĀ±\fIdd\fR,
401
where there is one digit before the decimal point and
402
the number of digits after it is equal to the
403
precision;
404
when the precision is missing, it is taken as 6;
405
if the precision is zero, no decimal point appears.
406
The
407
.B E
408
format code produces a number with
409
.B E
410
instead of
411
.B e
412
introducing the exponent.
413
The exponent always contains at least two digits.
414
.TP
415
.BR g , G
416
The
417
.B double
418
argument is printed in style
419
.BR f
420
or
421
.BR e
422
(or in style
423
.B E
424
in the case of a
425
.B G
426
conversion specifier),
427
with the precision specifying the number of significant digits.
428
If an explicit precision is zero, it is taken as 1.
429
The style used depends on the value converted:
430
style
431
.B e
432
is used only if the exponent resulting from
433
the conversion is less than \-4
434
or greater than or equal to the precision.
435
Trailing zeros are removed from the fractional portion of the result;
436
a decimal point appears only if it is followed by a digit.
437
.TP
438
.B c
439
The
440
.B int
441
argument is converted to an
442
.B unsigned
443
.BR char ,
444
and the resulting character is written.
445
.TP
446
.B s
447
The
448
argument is taken to be a string (character pointer)
449
and characters from the string are printed until
450
a null character
451
.RB ( \e0 )
452
is encountered or
453
the number of characters indicated by the precision
454
specification is reached.
455
If the precision is missing, it is taken to be infinite, so
456
all characters up to the first null character are printed.
457
A
458
zero
459
value for
460
the argument yields undefined results.
461
.TP
462
.B P
463
The
464
.B void*
465
argument is printed in an implementation-defined way (for Plan 9:
466
the address as hexadecimal number).
467
.TP
468
.B n
469
The argument shall be a pointer to an integer into which is
470
.I written
471
the number of characters written to the output stream so far by
472
this call to
473
.IR fprintf .
474
No argument is converted.
475
.TP
476
.B %
477
Print a
478
.BR % ;
479
no argument is converted.
480
.PD
481
.PP
482
If a conversion specification is invalid, the behavior is undefined.
483
.PP
484
If any argument is, or points to, a union or an aggregate
485
(except for an array of character type using
486
.B %s
487
conversion, or a pointer cast to be a pointer to
488
.B void
489
using
490
.B %P
491
conversion), the behavior is undefined.
492
.PP
493
In no case does a nonexistent or small field width cause truncation
494
of a field; if the result of a conversion is wider than the field width,
495
the field is expanded to contain the conversion result.
496
.SH SOURCE
497
.B /sys/src/libstdio
498
.SH SEE ALSO
499
.IR fopen (2),
500
.IR fscanf (2),
501
.IR print (2)
502
.SH BUGS
503
There is no way to print a wide character (rune); use
504
.IR print (2)
505
or
506
.IR bio (2).