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)