aboutsummaryrefslogtreecommitdiffstats
path: root/tools/lib/traceevent/Documentation/libtraceevent-tseq.txt
blob: 8ac6aa174e12a3d2306195392458e97478630b4d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
libtraceevent(3)
================

NAME
----
trace_seq_init, trace_seq_destroy, trace_seq_reset, trace_seq_terminate,
trace_seq_putc, trace_seq_puts, trace_seq_printf, trace_seq_vprintf,
trace_seq_do_fprintf, trace_seq_do_printf -
Initialize / destroy a trace sequence.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*
*#include <trace-seq.h>*

void *trace_seq_init*(struct trace_seq pass:[*]_s_);
void *trace_seq_destroy*(struct trace_seq pass:[*]_s_);
void *trace_seq_reset*(struct trace_seq pass:[*]_s_);
void *trace_seq_terminate*(struct trace_seq pass:[*]_s_);
int *trace_seq_putc*(struct trace_seq pass:[*]_s_, unsigned char _c_);
int *trace_seq_puts*(struct trace_seq pass:[*]_s_, const char pass:[*]_str_);
int *trace_seq_printf*(struct trace_seq pass:[*]_s_, const char pass:[*]_fmt_, _..._);
int *trace_seq_vprintf*(struct trace_seq pass:[*]_s_, const char pass:[*]_fmt_, va_list _args_);
int *trace_seq_do_printf*(struct trace_seq pass:[*]_s_);
int *trace_seq_do_fprintf*(struct trace_seq pass:[*]_s_, FILE pass:[*]_fp_);
--

DESCRIPTION
-----------
Trace sequences are used to allow a function to call several other functions
to create a string of data to use.

The _trace_seq_init()_ function initializes the trace sequence _s_.

The _trace_seq_destroy()_ function destroys the trace sequence _s_ and frees
all its resources that it had used.

The _trace_seq_reset()_ function re-initializes the trace sequence _s_. All
characters already written in _s_ will be deleted.

The _trace_seq_terminate()_ function terminates the trace sequence _s_. It puts
the null character pass:['\0'] at the end of the buffer.

The _trace_seq_putc()_ function puts a single character _c_ in the trace
sequence _s_.

The _trace_seq_puts()_ function puts a NULL terminated string _str_ in the
trace sequence _s_.

The _trace_seq_printf()_ function puts a formated string _fmt _with
variable arguments _..._ in the trace sequence _s_.

The _trace_seq_vprintf()_ function puts a formated string _fmt _with
list of arguments _args_ in the trace sequence _s_.

The _trace_seq_do_printf()_ function prints the buffer of trace sequence _s_ to
the standard output stdout.

The _trace_seq_do_fprintf()_ function prints the buffer of trace sequence _s_
to the given file _fp_.

RETURN VALUE
------------
Both _trace_seq_putc()_ and _trace_seq_puts()_ functions return the number of
characters put in the trace sequence, or 0 in case of an error

Both _trace_seq_printf()_ and _trace_seq_vprintf()_ functions return 0 if the
trace oversizes the buffer's free space, the number of characters printed, or
a negative value in case of an error.

Both _trace_seq_do_printf()_ and _trace_seq_do_fprintf()_ functions return the
number of printed characters, or -1 in case of an error.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
#include <trace-seq.h>
...
struct trace_seq seq;
trace_seq_init(&seq);
...
void foo_seq_print(struct trace_seq *tseq, char *format, ...)
{
	va_list ap;
	va_start(ap, format);
	if (trace_seq_vprintf(tseq, format, ap) <= 0) {
		/* Failed to print in the trace sequence */
	}
	va_end(ap);
}

trace_seq_reset(&seq);

char *str = " MAN page example";
if (trace_seq_puts(&seq, str) != strlen(str)) {
	/* Failed to put str in the trace sequence */
}
if (trace_seq_putc(&seq, ':') != 1) {
	/* Failed to put ':' in the trace sequence */
}
if (trace_seq_printf(&seq, " trace sequence: %d", 1) <= 0) {
	/* Failed to print in the trace sequence */
}
foo_seq_print( &seq, "  %d\n", 2);

trace_seq_terminate(&seq);
...

if (trace_seq_do_printf(&seq) < 0 ) {
	/* Failed to print the sequence buffer to the standard output */
}
FILE *fp = fopen("trace.txt", "w");
if (trace_seq_do_fprintf(&seq, fp) < 0 ) [
	/* Failed to print the sequence buffer to the trace.txt file */
}

trace_seq_destroy(&seq);
...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*trace-seq.h*
	Header file to include in order to have access to trace sequences related APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git