1636 lines
31 KiB
HTML
1636 lines
31 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of PRINTF</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>PRINTF</H1>
|
|
Section: Linux Programmer's Manual (3)<BR>Updated: 2019-10-10<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NAME</H2>
|
|
|
|
printf, fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf,
|
|
vsprintf, vsnprintf - formatted output conversion
|
|
<A NAME="lbAC"> </A>
|
|
<H2>SYNOPSIS</H2>
|
|
|
|
<PRE>
|
|
<B>#include <<A HREF="file:///usr/include/stdio.h">stdio.h</A>></B>
|
|
|
|
<B>int printf(const char *</B><I>format</I><B>, ...);</B>
|
|
<B>int fprintf(FILE *</B><I>stream</I><B>, const char *</B><I>format</I><B>, ...);</B>
|
|
<B>int dprintf(int </B><I>fd</I><B>, const char *</B><I>format</I><B>, ...);</B>
|
|
<B>int sprintf(char *</B><I>str</I><B>, const char *</B><I>format</I><B>, ...);</B>
|
|
<B>int snprintf(char *</B><I>str</I><B>, size_t </B><I>size</I><B>, const char *</B><I>format</I><B>, ...);</B>
|
|
|
|
<B>#include <<A HREF="file:///usr/include/stdarg.h">stdarg.h</A>></B>
|
|
|
|
<B>int vprintf(const char *</B><I>format</I><B>, va_list </B><I>ap</I><B>);</B>
|
|
<B>int vfprintf(FILE *</B><I>stream</I><B>, const char *</B><I>format</I><B>, va_list </B><I>ap</I><B>);</B>
|
|
<B>int vdprintf(int </B><I>fd</I><B>, const char *</B><I>format</I><B>, va_list </B><I>ap</I><B>);</B>
|
|
<B>int vsprintf(char *</B><I>str</I><B>, const char *</B><I>format</I><B>, va_list </B><I>ap</I><B>);</B>
|
|
<B>int vsnprintf(char *</B><I>str</I><B>, size_t </B><I>size</I><B>, const char *</B><I>format</I><B>, va_list </B><I>ap</I><B>);</B>
|
|
</PRE>
|
|
|
|
<P>
|
|
|
|
|
|
Feature Test Macro Requirements for glibc (see
|
|
<B><A HREF="/cgi-bin/man/man2html?7+feature_test_macros">feature_test_macros</A></B>(7)):
|
|
|
|
|
|
<P>
|
|
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<B>vsnprintf</B>():
|
|
|
|
<DL COMPACT><DT id="1"><DD>
|
|
_XOPEN_SOURCE >= 500 || _ISOC99_SOURCE ||
|
|
<BR> || /* Glibc versions <= 2.19: */ _BSD_SOURCE
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
<B>dprintf</B>(),
|
|
|
|
<B>vdprintf</B>():
|
|
|
|
|
|
<DL COMPACT><DT id="2"><DD>
|
|
<DL COMPACT>
|
|
<DT id="3">Since glibc 2.10:<DD>
|
|
_POSIX_C_SOURCE >= 200809L
|
|
<DT id="4">Before glibc 2.10:<DD>
|
|
_GNU_SOURCE
|
|
</DL>
|
|
</DL>
|
|
|
|
|
|
|
|
<A NAME="lbAD"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
The functions in the
|
|
<B>printf</B>()
|
|
|
|
family produce output according to a
|
|
<I>format</I>
|
|
|
|
as described below.
|
|
The functions
|
|
<B>printf</B>()
|
|
|
|
and
|
|
<B>vprintf</B>()
|
|
|
|
write output to
|
|
<I>stdout</I>,
|
|
|
|
the standard output stream;
|
|
<B>fprintf</B>()
|
|
|
|
and
|
|
<B>vfprintf</B>()
|
|
|
|
write output to the given output
|
|
<I>stream</I>;
|
|
|
|
<B>sprintf</B>(),
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<B>vsprintf</B>()
|
|
|
|
and
|
|
<B>vsnprintf</B>()
|
|
|
|
write to the character string
|
|
<I>str</I>.
|
|
|
|
<P>
|
|
|
|
The function
|
|
<B>dprintf</B>()
|
|
|
|
is the same as
|
|
<B>fprintf</B>()
|
|
|
|
except that it outputs to a file descriptor,
|
|
<I>fd</I>,
|
|
|
|
instead of to a
|
|
<I>stdio</I>
|
|
|
|
stream.
|
|
<P>
|
|
|
|
The functions
|
|
<B>snprintf</B>()
|
|
|
|
and
|
|
<B>vsnprintf</B>()
|
|
|
|
write at most
|
|
<I>size</I>
|
|
|
|
bytes (including the terminating null byte ('\0')) to
|
|
<I>str</I>.
|
|
|
|
<P>
|
|
|
|
The functions
|
|
<B>vprintf</B>(),
|
|
|
|
<B>vfprintf</B>(),
|
|
|
|
<B>vdprintf</B>(),
|
|
|
|
<B>vsprintf</B>(),
|
|
|
|
<B>vsnprintf</B>()
|
|
|
|
are equivalent to the functions
|
|
<B>printf</B>(),
|
|
|
|
<B>fprintf</B>(),
|
|
|
|
<B>dprintf</B>(),
|
|
|
|
<B>sprintf</B>(),
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
respectively, except that they are called with a
|
|
<I>va_list</I>
|
|
|
|
instead of a variable number of arguments.
|
|
These functions do not call the
|
|
<I>va_end</I>
|
|
|
|
macro.
|
|
Because they invoke the
|
|
<I>va_arg</I>
|
|
|
|
macro, the value of
|
|
<I>ap</I>
|
|
|
|
is undefined after the call.
|
|
See
|
|
<B><A HREF="/cgi-bin/man/man2html?3+stdarg">stdarg</A></B>(3).
|
|
|
|
<P>
|
|
|
|
All of these functions write the output under the control of a
|
|
<I>format</I>
|
|
|
|
string that specifies how subsequent arguments (or arguments accessed via
|
|
the variable-length argument facilities of
|
|
<B><A HREF="/cgi-bin/man/man2html?3+stdarg">stdarg</A></B>(3))
|
|
|
|
are converted for output.
|
|
<P>
|
|
|
|
C99 and POSIX.1-2001 specify that the results are undefined if a call to
|
|
<B>sprintf</B>(),
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<B>vsprintf</B>(),
|
|
|
|
or
|
|
<B>vsnprintf</B>()
|
|
|
|
would cause copying to take place between objects that overlap
|
|
(e.g., if the target string array and one of the supplied input arguments
|
|
refer to the same buffer).
|
|
See NOTES.
|
|
<A NAME="lbAE"> </A>
|
|
<H3>Format of the format string</H3>
|
|
|
|
The format string is a character string, beginning and ending
|
|
in its initial shift state, if any.
|
|
The format string is composed of zero or more directives: ordinary
|
|
characters (not
|
|
<B>%</B>),
|
|
|
|
which are copied unchanged to the output stream;
|
|
and conversion specifications, each of which results in fetching zero or
|
|
more subsequent arguments.
|
|
Each conversion specification is introduced by
|
|
the character
|
|
<B>%</B>,
|
|
|
|
and ends with a
|
|
<I>conversion specifier</I>.
|
|
|
|
In between there may be (in this order) zero or more
|
|
<I>flags</I>,
|
|
|
|
an optional minimum
|
|
<I>field width</I>,
|
|
|
|
an optional
|
|
<I>precision</I>
|
|
|
|
and an optional
|
|
<I>length modifier</I>.
|
|
|
|
<P>
|
|
|
|
The arguments must correspond properly (after type promotion) with the
|
|
conversion specifier.
|
|
By default, the arguments are used in the order
|
|
given, where each '*' (see
|
|
<I>Field width</I>
|
|
|
|
and
|
|
<I>Precision</I>
|
|
|
|
below) and each conversion specifier asks for the next
|
|
argument (and it is an error if insufficiently many arguments are given).
|
|
One can also specify explicitly which argument is taken,
|
|
at each place where an argument is required, by writing "%m$" instead
|
|
of '%' and "*m$" instead of '*',
|
|
where the decimal integer <I>m</I> denotes
|
|
the position in the argument list of the desired argument, indexed starting
|
|
from 1.
|
|
Thus,
|
|
<P>
|
|
|
|
|
|
|
|
printf("%*d", width, num);
|
|
|
|
|
|
<P>
|
|
|
|
and
|
|
<P>
|
|
|
|
|
|
|
|
printf("%2$*1$d", width, num);
|
|
|
|
|
|
<P>
|
|
|
|
are equivalent.
|
|
The second style allows repeated references to the
|
|
same argument.
|
|
The C99 standard does not include the style using '$',
|
|
which comes from the Single UNIX Specification.
|
|
If the style using
|
|
'$' is used, it must be used throughout for all conversions taking an
|
|
argument and all width and precision arguments, but it may be mixed
|
|
with "%%" formats, which do not consume an argument.
|
|
There may be no
|
|
gaps in the numbers of arguments specified using '$'; for example, if
|
|
arguments 1 and 3 are specified, argument 2 must also be specified
|
|
somewhere in the format string.
|
|
<P>
|
|
|
|
For some numeric conversions a radix character ("decimal point") or
|
|
thousands' grouping character is used.
|
|
The actual character used
|
|
depends on the
|
|
<B>LC_NUMERIC</B>
|
|
|
|
part of the locale.
|
|
(See
|
|
<B><A HREF="/cgi-bin/man/man2html?3+setlocale">setlocale</A></B>(3).)
|
|
|
|
The POSIX locale
|
|
uses '.' as radix character, and does not have a grouping character.
|
|
Thus,
|
|
<P>
|
|
|
|
|
|
|
|
<BR> printf("%'.2f", 1234567.89);
|
|
|
|
|
|
<P>
|
|
|
|
results in "1234567.89" in the POSIX locale, in "1234567,89" in the
|
|
nl_NL locale, and in "1.234.567,89" in the da_DK locale.
|
|
<A NAME="lbAF"> </A>
|
|
<H3>Flag characters</H3>
|
|
|
|
The character % is followed by zero or more of the following flags:
|
|
<DL COMPACT>
|
|
<DT id="5"><B>#</B>
|
|
|
|
<DD>
|
|
The value should be converted to an "alternate form".
|
|
For
|
|
<B>o</B>
|
|
|
|
conversions, the first character of the output string is made zero
|
|
(by prefixing a 0 if it was not zero already).
|
|
For
|
|
<B>x</B>
|
|
|
|
and
|
|
<B>X</B>
|
|
|
|
conversions, a nonzero result has the string "0x" (or "0X" for
|
|
<B>X</B>
|
|
|
|
conversions) prepended to it.
|
|
For
|
|
<B>a</B>,
|
|
|
|
<B>A</B>,
|
|
|
|
<B>e</B>,
|
|
|
|
<B>E</B>,
|
|
|
|
<B>f</B>,
|
|
|
|
<B>F</B>,
|
|
|
|
<B>g</B>,
|
|
|
|
and
|
|
<B>G</B>
|
|
|
|
conversions, the result will always contain a decimal point, even if no
|
|
digits follow it (normally, a decimal point appears in the results of those
|
|
conversions only if a digit follows).
|
|
For
|
|
<B>g</B>
|
|
|
|
and
|
|
<B>G</B>
|
|
|
|
conversions, trailing zeros are not removed from the result as they would
|
|
otherwise be.
|
|
For other conversions, the result is undefined.
|
|
<DT id="6"><B>0</B>
|
|
|
|
<DD>
|
|
The value should be zero padded.
|
|
For
|
|
<B>d</B>,
|
|
|
|
<B>i</B>,
|
|
|
|
<B>o</B>,
|
|
|
|
<B>u</B>,
|
|
|
|
<B>x</B>,
|
|
|
|
<B>X</B>,
|
|
|
|
<B>a</B>,
|
|
|
|
<B>A</B>,
|
|
|
|
<B>e</B>,
|
|
|
|
<B>E</B>,
|
|
|
|
<B>f</B>,
|
|
|
|
<B>F</B>,
|
|
|
|
<B>g</B>,
|
|
|
|
and
|
|
<B>G</B>
|
|
|
|
conversions, the converted value is padded on the left with zeros rather
|
|
than blanks.
|
|
If the
|
|
<B>0</B>
|
|
|
|
and
|
|
<B>-</B>
|
|
|
|
flags both appear, the
|
|
<B>0</B>
|
|
|
|
flag is ignored.
|
|
If a precision is given with a numeric conversion
|
|
(<B>d</B>,
|
|
|
|
<B>i</B>,
|
|
|
|
<B>o</B>,
|
|
|
|
<B>u</B>,
|
|
|
|
<B>x</B>,
|
|
|
|
and
|
|
<B>X</B>),
|
|
|
|
the
|
|
<B>0</B>
|
|
|
|
flag is ignored.
|
|
For other conversions, the behavior is undefined.
|
|
<DT id="7"><B>-</B>
|
|
|
|
<DD>
|
|
The converted value is to be left adjusted on the field boundary.
|
|
(The default is right justification.)
|
|
The converted value is padded on the right with blanks, rather
|
|
than on the left with blanks or zeros.
|
|
A
|
|
<B>-</B>
|
|
|
|
overrides a
|
|
<B>0</B>
|
|
|
|
if both are given.
|
|
<DT id="8"><B>' '</B>
|
|
|
|
<DD>
|
|
(a space) A blank should be left before a positive number
|
|
(or empty string) produced by a signed conversion.
|
|
<DT id="9"><B>+</B>
|
|
|
|
<DD>
|
|
A sign (+ or -) should always be placed before a number produced by a signed
|
|
conversion.
|
|
By default, a sign is used only for negative numbers.
|
|
A
|
|
<B>+</B>
|
|
|
|
overrides a space if both are used.
|
|
</DL>
|
|
<P>
|
|
|
|
The five flag characters above are defined in the C99 standard.
|
|
The Single UNIX Specification specifies one further flag character.
|
|
<DL COMPACT>
|
|
<DT id="10"><B>'</B>
|
|
|
|
<DD>
|
|
For decimal conversion
|
|
(<B>i</B>,
|
|
|
|
<B>d</B>,
|
|
|
|
<B>u</B>,
|
|
|
|
<B>f</B>,
|
|
|
|
<B>F</B>,
|
|
|
|
<B>g</B>,
|
|
|
|
<B>G</B>)
|
|
|
|
the output is to be grouped with thousands' grouping characters
|
|
if the locale information indicates any.
|
|
(See
|
|
<B><A HREF="/cgi-bin/man/man2html?3+setlocale">setlocale</A></B>(3).)
|
|
|
|
Note that many versions of
|
|
<B><A HREF="/cgi-bin/man/man2html?1+gcc">gcc</A></B>(1)
|
|
|
|
cannot parse this option and will issue a warning.
|
|
(SUSv2 did not
|
|
include <I>%'F</I>, but SUSv3 added it.)
|
|
</DL>
|
|
<P>
|
|
|
|
glibc 2.2 adds one further flag character.
|
|
<DL COMPACT>
|
|
<DT id="11"><B>I</B>
|
|
|
|
<DD>
|
|
For decimal integer conversion
|
|
(<B>i</B>,
|
|
|
|
<B>d</B>,
|
|
|
|
<B>u</B>)
|
|
|
|
the output uses the locale's alternative output digits, if any.
|
|
For example, since glibc 2.2.3 this will give Arabic-Indic digits
|
|
in the Persian ("fa_IR") locale.
|
|
|
|
</DL>
|
|
<A NAME="lbAG"> </A>
|
|
<H3>Field width</H3>
|
|
|
|
An optional decimal digit string (with nonzero first digit) specifying
|
|
a minimum field width.
|
|
If the converted value has fewer characters
|
|
than the field width, it will be padded with spaces on the left
|
|
(or right, if the left-adjustment flag has been given).
|
|
Instead of a decimal digit string one may write "*" or "*m$"
|
|
(for some decimal integer <I>m</I>) to specify that the field width
|
|
is given in the next argument, or in the <I>m</I>-th argument, respectively,
|
|
which must be of type
|
|
<I>int</I>.
|
|
|
|
A negative field width is taken as a '-' flag followed by a
|
|
positive field width.
|
|
In no case does a nonexistent or small field width cause truncation of a
|
|
field; if the result of a conversion is wider than the field width, the
|
|
field is expanded to contain the conversion result.
|
|
<A NAME="lbAH"> </A>
|
|
<H3>Precision</H3>
|
|
|
|
An optional precision, in the form of a period ('.') followed by an
|
|
optional decimal digit string.
|
|
Instead of a decimal digit string one may write "*" or "*m$"
|
|
(for some decimal integer <I>m</I>) to specify that the precision
|
|
is given in the next argument, or in the <I>m</I>-th argument, respectively,
|
|
which must be of type
|
|
<I>int</I>.
|
|
|
|
If the precision is given as just '.', the precision is taken to
|
|
be zero.
|
|
A negative precision is taken as if the precision were omitted.
|
|
This gives the minimum number of digits to appear for
|
|
<B>d</B>,
|
|
|
|
<B>i</B>,
|
|
|
|
<B>o</B>,
|
|
|
|
<B>u</B>,
|
|
|
|
<B>x</B>,
|
|
|
|
and
|
|
<B>X</B>
|
|
|
|
conversions, the number of digits to appear after the radix character for
|
|
<B>a</B>,
|
|
|
|
<B>A</B>,
|
|
|
|
<B>e</B>,
|
|
|
|
<B>E</B>,
|
|
|
|
<B>f</B>,
|
|
|
|
and
|
|
<B>F</B>
|
|
|
|
conversions, the maximum number of significant digits for
|
|
<B>g</B>
|
|
|
|
and
|
|
<B>G</B>
|
|
|
|
conversions, or the maximum number of characters to be printed from a
|
|
string for
|
|
<B>s</B>
|
|
|
|
and
|
|
<B>S</B>
|
|
|
|
conversions.
|
|
<A NAME="lbAI"> </A>
|
|
<H3>Length modifier</H3>
|
|
|
|
Here, "integer conversion" stands for
|
|
<B>d</B>,
|
|
|
|
<B>i</B>,
|
|
|
|
<B>o</B>,
|
|
|
|
<B>u</B>,
|
|
|
|
<B>x</B>,
|
|
|
|
or
|
|
<B>X</B>
|
|
|
|
conversion.
|
|
<DL COMPACT>
|
|
<DT id="12"><B>hh</B>
|
|
|
|
<DD>
|
|
A following integer conversion corresponds to a
|
|
<I>signed char</I>
|
|
|
|
or
|
|
<I>unsigned char</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>signed char</I>
|
|
|
|
argument.
|
|
<DT id="13"><B>h</B>
|
|
|
|
<DD>
|
|
A following integer conversion corresponds to a
|
|
<I>short int</I>
|
|
|
|
or
|
|
<I>unsigned short int</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>short int</I>
|
|
|
|
argument.
|
|
<DT id="14"><B>l</B>
|
|
|
|
<DD>
|
|
(ell) A following integer conversion corresponds to a
|
|
<I>long int</I>
|
|
|
|
or
|
|
<I>unsigned long int</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>long int</I>
|
|
|
|
argument, or a following
|
|
<B>c</B>
|
|
|
|
conversion corresponds to a
|
|
<I>wint_t</I>
|
|
|
|
argument, or a following
|
|
<B>s</B>
|
|
|
|
conversion corresponds to a pointer to
|
|
<I>wchar_t</I>
|
|
|
|
argument.
|
|
<DT id="15"><B>ll</B>
|
|
|
|
<DD>
|
|
(ell-ell).
|
|
A following integer conversion corresponds to a
|
|
<I>long long int</I>
|
|
|
|
or
|
|
<I>unsigned long long int</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>long long int</I>
|
|
|
|
argument.
|
|
<DT id="16"><B>q</B>
|
|
|
|
<DD>
|
|
A synonym for
|
|
<B>ll</B>.
|
|
|
|
This is a nonstandard extension, derived from BSD;
|
|
avoid its use in new code.
|
|
<DT id="17"><B>L</B>
|
|
|
|
<DD>
|
|
A following
|
|
<B>a</B>,
|
|
|
|
<B>A</B>,
|
|
|
|
<B>e</B>,
|
|
|
|
<B>E</B>,
|
|
|
|
<B>f</B>,
|
|
|
|
<B>F</B>,
|
|
|
|
<B>g</B>,
|
|
|
|
or
|
|
<B>G</B>
|
|
|
|
conversion corresponds to a
|
|
<I>long double</I>
|
|
|
|
argument.
|
|
(C99 allows %LF, but SUSv2 does not.)
|
|
<DT id="18"><B>j</B>
|
|
|
|
<DD>
|
|
A following integer conversion corresponds to an
|
|
<I>intmax_t</I>
|
|
|
|
or
|
|
<I>uintmax_t</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to an
|
|
<I>intmax_t</I>
|
|
|
|
argument.
|
|
<DT id="19"><B>z</B>
|
|
|
|
<DD>
|
|
A following integer conversion corresponds to a
|
|
<I>size_t</I>
|
|
|
|
or
|
|
<I>ssize_t</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>size_t</I>
|
|
|
|
argument.
|
|
<DT id="20"><B>Z</B>
|
|
|
|
<DD>
|
|
A nonstandard synonym for
|
|
<B>z</B>
|
|
|
|
that predates the appearance of
|
|
<B>z</B>.
|
|
|
|
Do not use in new code.
|
|
<DT id="21"><B>t</B>
|
|
|
|
<DD>
|
|
A following integer conversion corresponds to a
|
|
<I>ptrdiff_t</I>
|
|
|
|
argument, or a following
|
|
<B>n</B>
|
|
|
|
conversion corresponds to a pointer to a
|
|
<I>ptrdiff_t</I>
|
|
|
|
argument.
|
|
</DL>
|
|
<P>
|
|
|
|
SUSv3 specifies all of the above,
|
|
except for those modifiers explicitly noted as being nonstandard extensions.
|
|
SUSv2 specified only the length modifiers
|
|
<B>h</B>
|
|
|
|
(in
|
|
<B>hd</B>,
|
|
|
|
<B>hi</B>,
|
|
|
|
<B>ho</B>,
|
|
|
|
<B>hx</B>,
|
|
|
|
<B>hX</B>,
|
|
|
|
<B>hn</B>)
|
|
|
|
and
|
|
<B>l</B>
|
|
|
|
(in
|
|
<B>ld</B>,
|
|
|
|
<B>li</B>,
|
|
|
|
<B>lo</B>,
|
|
|
|
<B>lx</B>,
|
|
|
|
<B>lX</B>,
|
|
|
|
<B>ln</B>,
|
|
|
|
<B>lc</B>,
|
|
|
|
<B>ls</B>)
|
|
|
|
and
|
|
<B>L</B>
|
|
|
|
(in
|
|
<B>Le</B>,
|
|
|
|
<B>LE</B>,
|
|
|
|
<B>Lf</B>,
|
|
|
|
<B>Lg</B>,
|
|
|
|
<B>LG</B>).
|
|
|
|
<P>
|
|
|
|
As a nonstandard extension, the GNU implementations treats
|
|
<B>ll</B>
|
|
|
|
and
|
|
<B>L</B>
|
|
|
|
as synonyms, so that one can, for example, write
|
|
<B>llg</B>
|
|
|
|
(as a synonym for the standards-compliant
|
|
Lg<B>)</B>
|
|
|
|
and
|
|
<B>Ld</B>
|
|
|
|
(as a synonym for the standards compliant
|
|
<B>lld</B>).
|
|
|
|
Such usage is nonportable.
|
|
|
|
<A NAME="lbAJ"> </A>
|
|
<H3>Conversion specifiers</H3>
|
|
|
|
A character that specifies the type of conversion to be applied.
|
|
The conversion specifiers and their meanings are:
|
|
<DL COMPACT>
|
|
<DT id="22"><B>d</B>, <B>i</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>int</I>
|
|
|
|
argument is converted to signed decimal notation.
|
|
The precision, if any, gives the minimum number of digits
|
|
that must appear; if the converted value requires fewer digits, it is
|
|
padded on the left with zeros.
|
|
The default precision is 1.
|
|
When 0 is printed with an explicit precision 0, the output is empty.
|
|
<DT id="23"><B>o</B>, <B>u</B>, <B>x</B>, <B>X</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>unsigned int</I>
|
|
|
|
argument is converted to unsigned octal
|
|
(<B>o</B>),
|
|
|
|
unsigned decimal
|
|
(<B>u</B>),
|
|
|
|
or unsigned hexadecimal
|
|
(<B>x</B>
|
|
|
|
and
|
|
<B>X</B>)
|
|
|
|
notation.
|
|
The letters
|
|
<B>abcdef</B>
|
|
|
|
are used for
|
|
<B>x</B>
|
|
|
|
conversions; the letters
|
|
<B>ABCDEF</B>
|
|
|
|
are used for
|
|
<B>X</B>
|
|
|
|
conversions.
|
|
The precision, if any, gives the minimum number of digits
|
|
that must appear; if the converted value requires fewer digits, it is
|
|
padded on the left with zeros.
|
|
The default precision is 1.
|
|
When 0 is printed with an explicit precision 0, the output is empty.
|
|
<DT id="24"><B>e</B>, <B>E</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>double</I>
|
|
|
|
argument is rounded and converted in the style
|
|
[-]d<B>.</B>ddd<B>e</B>±dd
|
|
|
|
where there is one digit (which is nonzero if the argument is nonzero)
|
|
before the decimal-point character and the number
|
|
of digits after it is equal to the precision; if the precision is missing,
|
|
it is taken as 6; if the precision is zero, no decimal-point character
|
|
appears.
|
|
An
|
|
<B>E</B>
|
|
|
|
conversion uses the letter
|
|
<B>E</B>
|
|
|
|
(rather than
|
|
<B>e</B>)
|
|
|
|
to introduce the exponent.
|
|
The exponent always contains at least two
|
|
digits; if the value is zero, the exponent is 00.
|
|
<DT id="25"><B>f</B>, <B>F</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>double</I>
|
|
|
|
argument is rounded and converted to decimal notation in the style
|
|
[-]ddd<B>.</B>ddd,
|
|
|
|
where the number of digits after the decimal-point character is equal to
|
|
the precision specification.
|
|
If the precision is missing, it is taken as
|
|
6; if the precision is explicitly zero, no decimal-point character appears.
|
|
If a decimal point appears, at least one digit appears before it.
|
|
<DT id="26"><DD>
|
|
(SUSv2 does not know about
|
|
<B>F</B>
|
|
|
|
and says that character string representations for infinity and NaN
|
|
may be made available.
|
|
SUSv3 adds a specification for
|
|
<B>F</B>.
|
|
|
|
The C99 standard specifies "[-]inf" or "[-]infinity"
|
|
for infinity, and a string starting with "nan" for NaN, in the case of
|
|
<B>f</B>
|
|
|
|
conversion, and "[-]INF" or "[-]INFINITY" or "NAN" in the case of
|
|
<B>F</B>
|
|
|
|
conversion.)
|
|
<DT id="27"><B>g</B>, <B>G</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>double</I>
|
|
|
|
argument is converted in style
|
|
<B>f</B>
|
|
|
|
or
|
|
<B>e</B>
|
|
|
|
(or
|
|
<B>F</B>
|
|
|
|
or
|
|
<B>E</B>
|
|
|
|
for
|
|
<B>G</B>
|
|
|
|
conversions).
|
|
The precision specifies the number of significant digits.
|
|
If the precision is missing, 6 digits are given; if the precision is zero,
|
|
it is treated as 1.
|
|
Style
|
|
<B>e</B>
|
|
|
|
is used if the exponent from its conversion is less than -4 or greater
|
|
than or equal to the precision.
|
|
Trailing zeros are removed from the
|
|
fractional part of the result; a decimal point appears only if it is
|
|
followed by at least one digit.
|
|
<DT id="28"><B>a</B>, <B>A</B>
|
|
|
|
<DD>
|
|
(C99; not in SUSv2, but added in SUSv3)
|
|
For
|
|
<B>a</B>
|
|
|
|
conversion, the
|
|
<I>double</I>
|
|
|
|
argument is converted to hexadecimal notation (using the letters abcdef)
|
|
in the style
|
|
[-]<B>0x</B>h<B>.</B>hhhh<B>p</B>±;
|
|
|
|
for
|
|
<B>A</B>
|
|
|
|
conversion the prefix
|
|
<B>0X</B>,
|
|
|
|
the letters ABCDEF, and the exponent separator
|
|
<B>P</B>
|
|
|
|
is used.
|
|
There is one hexadecimal digit before the decimal point,
|
|
and the number of digits after it is equal to the precision.
|
|
The default precision suffices for an exact representation of the value
|
|
if an exact representation in base 2 exists
|
|
and otherwise is sufficiently large to distinguish values of type
|
|
<I>double</I>.
|
|
|
|
The digit before the decimal point is unspecified for nonnormalized
|
|
numbers, and nonzero but otherwise unspecified for normalized numbers.
|
|
<DT id="29"><B>c</B>
|
|
|
|
<DD>
|
|
If no
|
|
<B>l</B>
|
|
|
|
modifier is present, the
|
|
<I>int</I>
|
|
|
|
argument is converted to an
|
|
<I>unsigned char</I>,
|
|
|
|
and the resulting character is written.
|
|
If an
|
|
<B>l</B>
|
|
|
|
modifier is present, the
|
|
<I>wint_t</I>
|
|
|
|
(wide character) argument is converted to a multibyte sequence by a call
|
|
to the
|
|
<B><A HREF="/cgi-bin/man/man2html?3+wcrtomb">wcrtomb</A></B>(3)
|
|
|
|
function, with a conversion state starting in the initial state, and the
|
|
resulting multibyte string is written.
|
|
<DT id="30"><B>s</B>
|
|
|
|
<DD>
|
|
If no
|
|
<B>l</B>
|
|
|
|
modifier is present: the
|
|
<I>const char *</I>
|
|
|
|
argument is expected to be a pointer to an array of character type (pointer
|
|
to a string).
|
|
Characters from the array are written up to (but not
|
|
including) a terminating null byte ('\0');
|
|
if a precision is specified, no more than the number specified
|
|
are written.
|
|
If a precision is given, no null byte need be present;
|
|
if the precision is not specified, or is greater than the size of the
|
|
array, the array must contain a terminating null byte.
|
|
<DT id="31"><DD>
|
|
If an
|
|
<B>l</B>
|
|
|
|
modifier is present: the
|
|
<I>const wchar_t *</I>
|
|
|
|
argument is expected to be a pointer to an array of wide characters.
|
|
Wide characters from the array are converted to multibyte characters
|
|
(each by a call to the
|
|
<B><A HREF="/cgi-bin/man/man2html?3+wcrtomb">wcrtomb</A></B>(3)
|
|
|
|
function, with a conversion state starting in the initial state before
|
|
the first wide character), up to and including a terminating null
|
|
wide character.
|
|
The resulting multibyte characters are written up to
|
|
(but not including) the terminating null byte.
|
|
If a precision is
|
|
specified, no more bytes than the number specified are written, but
|
|
no partial multibyte characters are written.
|
|
Note that the precision
|
|
determines the number of
|
|
<I>bytes</I>
|
|
|
|
written, not the number of
|
|
<I>wide characters</I>
|
|
|
|
or
|
|
<I>screen positions</I>.
|
|
|
|
The array must contain a terminating null wide character, unless a
|
|
precision is given and it is so small that the number of bytes written
|
|
exceeds it before the end of the array is reached.
|
|
<DT id="32"><B>C</B>
|
|
|
|
<DD>
|
|
(Not in C99 or C11, but in SUSv2, SUSv3, and SUSv4.)
|
|
Synonym for
|
|
<B>lc</B>.
|
|
|
|
Don't use.
|
|
<DT id="33"><B>S</B>
|
|
|
|
<DD>
|
|
(Not in C99 or C11, but in SUSv2, SUSv3, and SUSv4.)
|
|
Synonym for
|
|
<B>ls</B>.
|
|
|
|
Don't use.
|
|
<DT id="34"><B>p</B>
|
|
|
|
<DD>
|
|
The
|
|
<I>void *</I>
|
|
|
|
pointer argument is printed in hexadecimal (as if by
|
|
<B>%#x</B>
|
|
|
|
or
|
|
<B>%#lx</B>).
|
|
|
|
<DT id="35"><B>n</B>
|
|
|
|
<DD>
|
|
The number of characters written so far is stored into the integer
|
|
pointed to by the corresponding argument.
|
|
That argument shall be an
|
|
<I>int *</I>,
|
|
|
|
or variant whose size matches the (optionally)
|
|
supplied integer length modifier.
|
|
No argument is converted.
|
|
(This specifier is not supported by the bionic C library.)
|
|
The behavior is undefined if the conversion specification includes
|
|
any flags, a field width, or a precision.
|
|
<DT id="36"><B>m</B>
|
|
|
|
<DD>
|
|
(Glibc extension; supported by uClibc and musl.)
|
|
Print output of
|
|
<I>strerror(errno)</I>.
|
|
|
|
No argument is required.
|
|
<DT id="37"><B>%</B>
|
|
|
|
<DD>
|
|
A '%' is written.
|
|
No argument is converted.
|
|
The complete conversion
|
|
specification is '%%'.
|
|
</DL>
|
|
<A NAME="lbAK"> </A>
|
|
<H2>RETURN VALUE</H2>
|
|
|
|
Upon successful return, these functions return the number of characters
|
|
printed (excluding the null byte used to end output to strings).
|
|
<P>
|
|
|
|
The functions
|
|
<B>snprintf</B>()
|
|
|
|
and
|
|
<B>vsnprintf</B>()
|
|
|
|
do not write more than
|
|
<I>size</I>
|
|
|
|
bytes (including the terminating null byte ('\0')).
|
|
If the output was truncated due to this limit, then the return value
|
|
is the number of characters (excluding the terminating null byte)
|
|
which would have been written to the final string if enough space
|
|
had been available.
|
|
Thus, a return value of
|
|
<I>size</I>
|
|
|
|
or more means that the output was truncated.
|
|
(See also below under NOTES.)
|
|
<P>
|
|
|
|
If an output error is encountered, a negative value is returned.
|
|
<A NAME="lbAL"> </A>
|
|
<H2>ATTRIBUTES</H2>
|
|
|
|
For an explanation of the terms used in this section, see
|
|
<B><A HREF="/cgi-bin/man/man2html?7+attributes">attributes</A></B>(7).
|
|
|
|
<TABLE BORDER>
|
|
<TR VALIGN=top><TD><B>Interface</B></TD><TD><B>Attribute</B></TD><TD><B>Value</B><BR></TD></TR>
|
|
<TR VALIGN=top><TD>
|
|
<B>printf</B>(),
|
|
|
|
<B>fprintf</B>(),
|
|
|
|
<BR>
|
|
|
|
<B>sprintf</B>(),
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<BR>
|
|
|
|
<B>vprintf</B>(),
|
|
|
|
<B>vfprintf</B>(),
|
|
|
|
<BR>
|
|
|
|
<B>vsprintf</B>(),
|
|
|
|
<B>vsnprintf</B>()
|
|
|
|
</TD><TD>Thread safety</TD><TD>MT-Safe locale<BR></TD></TR>
|
|
</TABLE>
|
|
|
|
<P>
|
|
<A NAME="lbAM"> </A>
|
|
<H2>CONFORMING TO</H2>
|
|
|
|
<B>fprintf</B>(),
|
|
|
|
<B>printf</B>(),
|
|
|
|
<B>sprintf</B>(),
|
|
|
|
<B>vprintf</B>(),
|
|
|
|
<B>vfprintf</B>(),
|
|
|
|
<B>vsprintf</B>():
|
|
|
|
POSIX.1-2001, POSIX.1-2008, C89, C99.
|
|
<P>
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<B>vsnprintf</B>():
|
|
|
|
POSIX.1-2001, POSIX.1-2008, C99.
|
|
<P>
|
|
|
|
The
|
|
<B>dprintf</B>()
|
|
|
|
and
|
|
<B>vdprintf</B>()
|
|
|
|
functions were originally GNU extensions that were later standardized
|
|
in POSIX.1-2008.
|
|
<P>
|
|
|
|
Concerning the return value of
|
|
<B>snprintf</B>(),
|
|
|
|
SUSv2 and C99 contradict each other: when
|
|
<B>snprintf</B>()
|
|
|
|
is called with
|
|
<I>size</I>=0
|
|
|
|
then SUSv2 stipulates an unspecified return value less than 1,
|
|
while C99 allows
|
|
<I>str</I>
|
|
|
|
to be NULL in this case, and gives the return value (as always)
|
|
as the number of characters that would have been written in case
|
|
the output string has been large enough.
|
|
POSIX.1-2001 and later align their specification of
|
|
<B>snprintf</B>()
|
|
|
|
with C99.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<P>
|
|
|
|
glibc 2.1 adds length modifiers <B>hh</B>, <B>j</B>, <B>t</B>, and <B>z</B>
|
|
and conversion characters <B>a</B> and <B>A</B>.
|
|
<P>
|
|
|
|
glibc 2.2 adds the conversion character <B>F</B> with C99 semantics,
|
|
and the flag character <B>I</B>.
|
|
<A NAME="lbAN"> </A>
|
|
<H2>NOTES</H2>
|
|
|
|
Some programs imprudently rely on code such as the following
|
|
<P>
|
|
|
|
<BR> sprintf(buf, "%s some further text", buf);
|
|
<P>
|
|
|
|
to append text to
|
|
<I>buf</I>.
|
|
|
|
However, the standards explicitly note that the results are undefined
|
|
if source and destination buffers overlap when calling
|
|
<B>sprintf</B>(),
|
|
|
|
<B>snprintf</B>(),
|
|
|
|
<B>vsprintf</B>(),
|
|
|
|
and
|
|
<B>vsnprintf</B>().
|
|
|
|
|
|
Depending on the version of
|
|
<B><A HREF="/cgi-bin/man/man2html?1+gcc">gcc</A></B>(1)
|
|
|
|
used, and the compiler options employed, calls such as the above will
|
|
<B>not</B>
|
|
|
|
produce the expected results.
|
|
<P>
|
|
|
|
The glibc implementation of the functions
|
|
<B>snprintf</B>()
|
|
|
|
and
|
|
<B>vsnprintf</B>()
|
|
|
|
conforms to the C99 standard, that is, behaves as described above,
|
|
since glibc version 2.1.
|
|
Until glibc 2.0.6, they would return -1
|
|
when the output was truncated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<A NAME="lbAO"> </A>
|
|
<H2>BUGS</H2>
|
|
|
|
Because
|
|
<B>sprintf</B>()
|
|
|
|
and
|
|
<B>vsprintf</B>()
|
|
|
|
assume an arbitrarily long string, callers must be careful not to overflow
|
|
the actual space; this is often impossible to assure.
|
|
Note that the length
|
|
of the strings produced is locale-dependent and difficult to predict.
|
|
Use
|
|
<B>snprintf</B>()
|
|
|
|
and
|
|
<B>vsnprintf</B>()
|
|
|
|
instead (or
|
|
<B><A HREF="/cgi-bin/man/man2html?3+asprintf">asprintf</A></B>(3)
|
|
|
|
and
|
|
<B><A HREF="/cgi-bin/man/man2html?3+vasprintf">vasprintf</A></B>(3)).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<P>
|
|
|
|
Code such as
|
|
<B>printf(</B><I>foo</I><B>);</B>
|
|
|
|
often indicates a bug, since
|
|
<I>foo</I>
|
|
|
|
may contain a % character.
|
|
If
|
|
<I>foo</I>
|
|
|
|
comes from untrusted user input, it may contain <B>%n</B>, causing the
|
|
<B>printf</B>()
|
|
|
|
call to write to memory and creating a security hole.
|
|
|
|
|
|
|
|
<A NAME="lbAP"> </A>
|
|
<H2>EXAMPLE</H2>
|
|
|
|
To print
|
|
<I>Pi</I>
|
|
|
|
to five decimal places:
|
|
<P>
|
|
|
|
|
|
|
|
#include <<A HREF="file:///usr/include/math.h">math.h</A>>
|
|
#include <<A HREF="file:///usr/include/stdio.h">stdio.h</A>>
|
|
fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));
|
|
|
|
|
|
<P>
|
|
|
|
To print a date and time in the form "Sunday, July 3, 10:02",
|
|
where
|
|
<I>weekday</I>
|
|
|
|
and
|
|
<I>month</I>
|
|
|
|
are pointers to strings:
|
|
<P>
|
|
|
|
|
|
|
|
#include <<A HREF="file:///usr/include/stdio.h">stdio.h</A>>
|
|
fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
|
|
<BR> weekday, month, day, hour, min);
|
|
|
|
|
|
<P>
|
|
|
|
Many countries use the day-month-year order.
|
|
Hence, an internationalized version must be able to print
|
|
the arguments in an order specified by the format:
|
|
<P>
|
|
|
|
|
|
|
|
#include <<A HREF="file:///usr/include/stdio.h">stdio.h</A>>
|
|
fprintf(stdout, format,
|
|
<BR> weekday, month, day, hour, min);
|
|
|
|
|
|
<P>
|
|
|
|
where
|
|
<I>format</I>
|
|
|
|
depends on locale, and may permute the arguments.
|
|
With the value:
|
|
<P>
|
|
|
|
|
|
|
|
"%1$s, %3$d. %2$s, %4$d:%5$.2d\n"
|
|
|
|
|
|
<P>
|
|
|
|
one might obtain "Sonntag, 3. Juli, 10:02".
|
|
<P>
|
|
|
|
To allocate a sufficiently large string and print into it
|
|
(code correct for both glibc 2.0 and glibc 2.1):
|
|
<P>
|
|
|
|
|
|
#include <<A HREF="file:///usr/include/stdio.h">stdio.h</A>>
|
|
#include <<A HREF="file:///usr/include/stdlib.h">stdlib.h</A>>
|
|
#include <<A HREF="file:///usr/include/stdarg.h">stdarg.h</A>>
|
|
<P>
|
|
char *
|
|
make_message(const char *fmt, ...)
|
|
{
|
|
<BR> int size = 0;
|
|
<BR> char *p = NULL;
|
|
<BR> va_list ap;
|
|
<P>
|
|
<BR> /* Determine required size */
|
|
<P>
|
|
<BR> va_start(ap, fmt);
|
|
<BR> size = vsnprintf(p, size, fmt, ap);
|
|
<BR> va_end(ap);
|
|
<P>
|
|
<BR> if (size < 0)
|
|
<BR> return NULL;
|
|
<P>
|
|
<BR> size++; /* For '\0' */
|
|
<BR> p = malloc(size);
|
|
<BR> if (p == NULL)
|
|
<BR> return NULL;
|
|
<P>
|
|
<BR> va_start(ap, fmt);
|
|
<BR> size = vsnprintf(p, size, fmt, ap);
|
|
<BR> va_end(ap);
|
|
<P>
|
|
<BR> if (size < 0) {
|
|
<BR> free(p);
|
|
<BR> return NULL;
|
|
<BR> }
|
|
<P>
|
|
<BR> return p;
|
|
}
|
|
|
|
<P>
|
|
|
|
If truncation occurs in glibc versions prior to 2.0.6, this is treated as an
|
|
error instead of being handled gracefully.
|
|
<A NAME="lbAQ"> </A>
|
|
<H2>SEE ALSO</H2>
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?1+printf">printf</A></B>(1),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+asprintf">asprintf</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+puts">puts</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+scanf">scanf</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+setlocale">setlocale</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+strfromd">strfromd</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+wcrtomb">wcrtomb</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?3+wprintf">wprintf</A></B>(3),
|
|
|
|
<B><A HREF="/cgi-bin/man/man2html?5+locale">locale</A></B>(5)
|
|
|
|
<A NAME="lbAR"> </A>
|
|
<H2>COLOPHON</H2>
|
|
|
|
This page is part of release 5.05 of the Linux
|
|
<I>man-pages</I>
|
|
|
|
project.
|
|
A description of the project,
|
|
information about reporting bugs,
|
|
and the latest version of this page,
|
|
can be found at
|
|
<A HREF="https://www.kernel.org/doc/man-pages/.">https://www.kernel.org/doc/man-pages/.</A>
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="38"><A HREF="#lbAB">NAME</A><DD>
|
|
<DT id="39"><A HREF="#lbAC">SYNOPSIS</A><DD>
|
|
<DT id="40"><A HREF="#lbAD">DESCRIPTION</A><DD>
|
|
<DL>
|
|
<DT id="41"><A HREF="#lbAE">Format of the format string</A><DD>
|
|
<DT id="42"><A HREF="#lbAF">Flag characters</A><DD>
|
|
<DT id="43"><A HREF="#lbAG">Field width</A><DD>
|
|
<DT id="44"><A HREF="#lbAH">Precision</A><DD>
|
|
<DT id="45"><A HREF="#lbAI">Length modifier</A><DD>
|
|
<DT id="46"><A HREF="#lbAJ">Conversion specifiers</A><DD>
|
|
</DL>
|
|
<DT id="47"><A HREF="#lbAK">RETURN VALUE</A><DD>
|
|
<DT id="48"><A HREF="#lbAL">ATTRIBUTES</A><DD>
|
|
<DT id="49"><A HREF="#lbAM">CONFORMING TO</A><DD>
|
|
<DT id="50"><A HREF="#lbAN">NOTES</A><DD>
|
|
<DT id="51"><A HREF="#lbAO">BUGS</A><DD>
|
|
<DT id="52"><A HREF="#lbAP">EXAMPLE</A><DD>
|
|
<DT id="53"><A HREF="#lbAQ">SEE ALSO</A><DD>
|
|
<DT id="54"><A HREF="#lbAR">COLOPHON</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:52 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|