1 VPRINTF(3C) Standard C Library Functions VPRINTF(3C)
2
3
4
5 NAME
6 vprintf, vfprintf, vsprintf, vsnprintf, vasprintf - print formatted
7 output of a variable argument list
8
9 SYNOPSIS
10 #include <stdio.h>
11 #include <stdarg.h>
12
13 int vprintf(const char *format, va_list ap);
14
15
16 int vfprintf(FILE *stream, const char *format, va_list ap);
17
18
19 int vsprintf(char *s, const char *format, va_list ap);
20
21
22 int vsnprintf(char *s, size_t n, const char *format, va_list ap);
23
24
25 int vasprintf(char **ret, const char *format, va_list ap);
26
27
28 DESCRIPTION
29 The vprintf(), vfprintf(), vsprintf(), vsnprintf(), and vasprintf()
30 functions are the same as printf(), fprintf(), sprintf(), snprintf(),
31 and asprintf(), respectively, except that instead of being called with
32 a variable number of arguments, they are called with an argument list
33 as defined in the <stdarg.h> header. See printf(3C).
34
35
36 The <stdarg.h> header defines the type va_list and a set of macros for
37 advancing through a list of arguments whose number and types may vary.
38 The argument ap to the vprint family of functions is of type va_list.
39 This argument is used with the <stdarg.h> header file macros
40 va_start(), va_arg(), and va_end() (see stdarg(3EXT)). The EXAMPLES
41 section below demonstrates the use of va_start() and va_end() with
42 vprintf().
43
44
45 The macro va_alist() is used as the parameter list in a function
46 definition, as in the function called error() in the example below. The
47 macro va_start(ap, name), where ap is of type va_list and name is the
48 rightmost parameter (just before ...), must be called before any
49 attempt to traverse and access unnamed arguments is made. The
50 va_end(ap) macro must be invoked when all desired arguments have been
51 accessed. The argument list in ap can be traversed again if va_start()
52 is called again after va_end(). In the example below, the error()
53 arguments (arg1, arg2, ...) are passed to vfprintf() in the argument
54 ap.
55
56 RETURN VALUES
57 Refer to printf(3C).
58
59 ERRORS
60 The vprintf() and vfprintf() functions will fail if either the stream
61 is unbuffered or the stream's buffer needed to be flushed and:
62
63 EFBIG
64 The file is a regular file and an attempt was made to write at
65 or beyond the offset maximum.
66
67
68 EXAMPLES
69 Example 1 Using vprintf() to write an error routine.
70
71
72 The following demonstrates how vfprintf() could be used to write an
73 error routine:
74
75
76 #include <stdio.h>
77 #include <stdarg.h>
78 ...
79 /*
80 * error should be called like
81 * error(function_name, format, arg1, ...);
82 */
83 void error(char *function_name, char *format, ...)
84 {
85 va_list ap;
86 va_start(ap, format);
87 /* print out name of function causing error */
88 (void) fprintf(stderr, "ERR in %s: ", function_name);
89 /* print out remainder of message */
90 (void) vfprintf(stderr, format, ap);
91 va_end(ap);
92 (void) abort();
93 }
94
95
96 ATTRIBUTES
97 See attributes(5) for descriptions of the following attributes:
98
99
100
101
102 +--------------------+-----------------+
103 | ATTRIBUTE TYPE | ATTRIBUTE VALUE |
104 +--------------------+-----------------+
105 |Interface Stability | Committed |
106 +--------------------+-----------------+
107 |MT-Level | See below. |
108 +--------------------+-----------------+
109 |Standard | See below. |
110 +--------------------+-----------------+
111
112
113 All of these functions can be used safely in multithreaded
114 applications, as long as setlocale(3C) is not being called to change
115 the locale.
116
117
118 See standards(5) for the standards conformance of vprintf(),
119 vfprintf(), vsprintf(), and vsnprintf(). The vasprintf() function is
120 modeled on the one that appears in the FreeBSD, NetBSD, and GNU C
121 libraries.
122
123 SEE ALSO
124 printf(3C), attributes(5), stdarg(3EXT), attributes(5), standards(5)
125
126 NOTES
127 The vsnprintf() return value when n = 0 was changed in the Solaris 10
128 release. The change was based on the SUSv3 specification. The previous
129 behavior was based on the initial SUSv2 specification, where
130 vsnprintf() when n = 0 returns an unspecified value less than 1.
131
132
133
134 January 7, 2009 VPRINTF(3C)
|
1 VPRINTF(3C) Standard C Library Functions VPRINTF(3C)
2
3 NAME
4 vprintf, vfprintf, vsprintf, vsnprintf, vasprintf - print formatted
5 output of a variable argument list
6
7 LIBRARY
8 Standard C Library (libc, -lc)
9
10 SYNOPSIS
11 #include <stdarg.h>
12 #include <stdio.h>
13
14 int
15 vprintf(const char *format, va_list);
16
17 int
18 vfprintf(FILE *stream, const char *format, va_list ap);
19
20 int
21 vsprintf(char *s, const char *format, va_list ap);
22
23 int
24 vsnprintf(char *s, size_t n, const char *format, va_list ap);
25
26 int
27 vasprintf(char **ret, const char *format, va_list ap);
28
29 DESCRIPTION
30 The vprintf(), vfprintf(), vsprintf(), vsnprintf(), and vasprintf()
31 functions are the same as printf(), fprintf(), sprintf(), snprintf(), and
32 asprintf(), respectively, except that instead of being called with a
33 variable number of arguments, they are called with an argument list as
34 defined in the <stdarg.h> header. See printf(3C).
35
36 The <stdarg.h> header defines the type va_list and a set of macros for
37 advancing through a list of arguments whose number and types may vary.
38 The argument ap to the vprint family of functions is of type va_list.
39 This argument is used with the <stdarg.h> header file macros va_start(),
40 va_arg(), and va_end() (see stdarg(3EXT)). The EXAMPLES section below
41 demonstrates the use of va_start() and va_end() with vprintf().
42
43 The macro va_alist() is used as the parameter list in a function
44 definition, as in the function called error() in the example below. The
45 macro `va_start(ap, name)', where ap is of type va_list and name is the
46 rightmost parameter (just before ...), must be called before any attempt
47 to traverse and access unnamed arguments is made. The `va_end(ap)' macro
48 must be invoked when all desired arguments have been accessed. The
49 argument list in ap can be traversed again if va_start() is called again
50 after va_end(). In the example below, the error() arguments (arg1, arg2,
51 ...) are passed to vfprintf() in the argument ap.
52
53 RETURN VALUES
54 Refer to printf(3C).
55
56 EXAMPLES
57 Example 1 Using vprintf() to write an error routine.
58
59 The following demonstrates how vfprintf() could be used to write an error
60 routine:
61
62 #include <stdarg.h>
63 #include <stdio.h>
64
65 /*
66 * error should be called like
67 * error(function_name, format, arg1, ...);
68 */
69 void
70 error(char *function_name, char *format, ...)
71 {
72 va_list ap;
73
74 va_start(ap, format);
75
76 /* Print out name of function causing error */
77 (void) fprintf(stderr, "ERR in %s: ", function_name);
78
79 /* Print out remainder of message */
80 (void) vfprintf(stderr, format, ap);
81
82 va_end(ap);
83
84 (void) abort();
85 }
86
87 ERRORS
88 The vfprintf() function will fail if either the stream is unbuffered or
89 the stream's buffer needed to be flushed and:
90
91 EFBIG The file is a regular file and an attempt was made to
92 write at or beyond the offset maximum.
93
94 INTERFACE STABILITY
95 Committed
96
97 MT-LEVEL
98 All of these functions can be used safely in multithreaded applications,
99 as long as setlocale(3C) is not being called to change the locale.
100
101 SEE ALSO
102 printf(3C), stdarg(3EXT), attributes(5), standards(5)
103
104 STANDARDS
105 See standards(5) for the standards conformance of vprintf(), vfprintf(),
106 vsprintf(), and vsnprintf(). The vasprintf() function is modeled on the
107 one that appears in the FreeBSD, NetBSD, and GNU C libraries.
108
109 NOTES
110 The vsnprintf() return value when n is 0 was changed in the Solaris 10
111 release. The change was based on the SUSv3 specification. The previous
112 behavior was based on the initial SUSv2 specification, where vsnprintf()
113 when n is 0 returns an unspecified value less than 1.
114
115 illumos July 10, 2020 illumos
|