VLFMT(3C) Standard C Library Functions VLFMT(3C)
NAME
vlfmt - display error message in standard format and pass to logging
and monitoring services
SYNOPSIS
#include <pfmt.h>
#include <stdarg.h>
int vlfmt(
FILE *stream,
long flag,
const char *format,
va_list ap);
DESCRIPTION
The
vlfmt() function is identical to
lfmt(3C), except that it is
called with an argument list as defined by
<stdarg.h>.
The <
stdarg.h> header defines the type
va_list and a set of macros
for advancing through a list of arguments whose number and types may
vary. The
ap argument is of type
va_list. This argument is used with
the <
stdarg.h> macros
va_start(),
va_arg(), and
va_end(). See
stdarg(3EXT). The example in the
EXAMPLES section below demonstrates
their use with
vlfmt().
RETURN VALUES
Upon successful completion,
vlfmt() returns the number of bytes
transmitted. Otherwise,
-1 is returned if there was a write error to
stream, or
-2 is returned if unable to log and/or display at console.
EXAMPLES
Example 1: Use of vlfmt() to write an errlog()routine.
The following example demonstrates how
vlfmt() could be used to write
an
errlog() routine. The
va_alist() macro is used as the parameter
list in a function definition. The
va_start(ap, ...) call, where
ap is of type
va_list, must be invoked before any attempt to traverse
and access unnamed arguments. Calls to
va_arg(ap, atype) traverse the
argument list. Each execution of
va_arg() expands to an expression
with the value and type of the next argument in the list
ap, which is
the same object initialized by
va_start(). The
atype argument is the
type that the returned argument is expected to be. The
va_end(ap) macro must be invoked when all desired arguments have been accessed.
The argument list in
ap can be traversed again if
va_start() is
called again after
va_end().) In the example below,
va_arg() is
executed first to retrieve the format string passed to
errlog(). The
remaining
errlog() arguments (
arg1,
arg2,
...) are passed to
vlfmt() in the argument
ap.
#include <pfmt.h> #include <stdarg.h> /* * errlog should be called like * errlog(log_info, format, arg1, ...); */ void errlog(long log_info, ...) { va_list ap; char *format; va_start(ap, ); format = va_arg(ap, char *); (void) vlfmt(stderr, log_info|MM_ERROR, format, ap); va_end(ap); (void) abort(); }USAGE
Since
vlfmt() uses
gettxt(3C), it is recommended that
vlfmt() not be
used.
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+---------------+-----------------+
|ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+---------------+-----------------+
|MT-Level | MT-Safe |
+---------------+-----------------+
SEE ALSO
gettxt(3C),
lfmt(3C),
stdarg(3EXT),
attributes(7) December 29, 1996 VLFMT(3C)