Standard C Library Functions vprintf(3C)
NAME
vprintf, vfprintf, vsprintf, vsnprintf, vasprintf - print
formatted output of a variable argument list
SYNOPSIS
#include
#include
int vprintf(const char *format, valist ap);
int vfprintf(FILE *stream, const char *format, valist ap);
int vsprintf(char *s, const char *format, valist ap);
int vsnprintf(char *s, sizet n, const char *format, valist ap);
int vasprintf(char **ret, const char *format, valist ap);
DESCRIPTION
The vprintf(), vfprintf(), vsprintf(), vsnprintf(), and
vasprintf() functions are the same as printf(), fprintf(),
sprintf(), snprintf(), and asprintf(), respectively, except
that instead of being called with a variable number of argu-
ments, they are called with an argument list as defined in
the header. See printf(3C).
The header defines the type valist and a set of
macros for advancing through a list of arguments whose
number and types may vary. The argument ap to the vprint
family of functions is of type valist. This argument is
used with the header file macros vastart(),
vaarg(), and vaend() (see stdarg(3EXT)). The EXAMPLES sec-
tion below demonstrates the use of vastart() and vaend()
with vprintf().
The macro vaalist() is used as the parameter list in a
function definition, as in the function called error() in
the example below. The macro vastart(ap, name), where ap is
of type valist and name is the rightmost parameter (just
before ...), must be called before any attempt to traverse
and access unnamed arguments is made. The vaend(ap) macro
must be invoked when all desired arguments have been
accessed. The argument list in ap can be traversed again if
vastart() is called again after vaend(). In the example
below, the error() arguments (arg1, arg2, ...) are passed to
SunOS 5.11 Last change: 7 Jan 2009 1
Standard C Library Functions vprintf(3C)
vfprintf() in the argument ap.
RETURN VALUES
Refer to printf(3C).
ERORS
The vprintf() and vfprintf() functions will fail if either
the stream is unbuffered or the stream's buffer needed to be
flushed and:
EFBIG The file is a regular file and an attempt was made
to write at or beyond the offset maximum.
EXAMPLES
Example 1 Using vprintf() to write an error routine.
The following demonstrates how vfprintf() could be used to
write an error routine:
#include
#include
. . .
/*
* error should be called like
* error(functionname, format, arg1, ...);
*/
void error(char *functionname, char *format, ...)
{
valist ap;
vastart(ap, format);
/* print out name of function causing error */
(void) fprintf(stderr, "ER in %s: ", functionname);
/* print out remainder of message */
(void) vfprintf(stderr, format, ap);
vaend(ap);
(void) abort();
}
ATRIBUTES
See attributes(5) for descriptions of the following attri-
butes:
SunOS 5.11 Last change: 7 Jan 2009 2
Standard C Library Functions vprintf(3C)
ATRIBUTE TYPE ATRIBUTE VALUE
Interface Stability Committed
MT-Level See below.
Standard See below.
All of these functions can be used safely in multithreaded
applications, as long as setlocale(3C) is not being called
to change the locale.
See standards(5) for the standards conformance of vprintf(),
vfprintf(), vsprintf(), and vsnprintf(). The vasprintf()
function is modeled on the one that appears in the FreeBSD,
NetBSD, and GNU C libraries.
SEE ALSO
printf(3C), attributes(5), stdarg(3EXT), attributes(5),
standards(5)
NOTES
The vsnprintf() return value when n = 0 was changed in the
Solaris 10 release. The change was based on the SUSv3
specification. The previous behavior was based on the ini-
tial SUSv2 specification, where vsnprintf() when n = 0
returns an unspecified value less than 1.
SunOS 5.11 Last change: 7 Jan 2009 3
|