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 β bestie, this is how you init and destroy a trace sequence π
Ok so real quick before we dive in: this is a page from the libtraceevent Manual, lowercase-girlboss edition, and every single fact in it is preserved exactly. No cap. π¦
πΈ SYNOPSIS πΈ
#include <event-parse.h>
#include <trace-seq.h>
void trace_seq_init(struct trace_seq *s);
void trace_seq_destroy(struct trace_seq *s);
void trace_seq_reset(struct trace_seq *s);
void trace_seq_terminate(struct trace_seq *s);
int trace_seq_putc(struct trace_seq *s, unsigned char c);
int trace_seq_puts(struct trace_seq *s, const char *str);
int trace_seq_printf(struct trace_seq *s, const char *fmt, ...);
int trace_seq_vprintf(struct trace_seq *s, const char *fmt, va_list args);
int trace_seq_do_printf(struct trace_seq *s);
int trace_seq_do_fprintf(struct trace_seq *s, FILE *fp);
π DESCRIPTION π
So likeβ¦ trace sequences are the moment. They exist so that a function can call a bunch of other functions and build up one string of data to use. It's giving "collab". It's giving "the group project actually worked". π«Ά
trace_seq_init()β initializes the trace sequences. Wake it up, bestie β¨trace_seq_destroy()β destroys the trace sequencesand frees all its resources that it had used. She's done, she's clearing her cache, she's logging off πtrace_seq_reset()β re-initializes the trace sequences. All characters already written inswill be deleted. Gone, deleted, never happened πtrace_seq_terminate()β terminates the trace sequences. It puts the null character'\0'at the end of the buffer. Periodt, close the string πtrace_seq_putc()β puts a single charactercin the trace sequences. One (1) character. Microdosing. πtrace_seq_puts()β puts a NULL terminated stringstrin the trace sequences. The whole string, no chill πtrace_seq_printf()β puts a formated stringfmtwith variable arguments...in the trace sequences. β¨trace_seq_vprintf()β puts a formated stringfmtwith list of argumentsargsin the trace sequences. Same energy, but you already had the args list ready π§trace_seq_do_printf()β prints the buffer of trace sequencesto the standard outputstdout. Say it out loud in the terminal, queen π£οΈtrace_seq_do_fprintf()β prints the buffer of trace sequencesto the given filefp. Say it to the file instead π
π₯ 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.
bestie if you get0fromprintf/vprintfthat is NOT a success, that is the buffer going "ma'am I have no room". Check your bounds. π
π EXAMPLE π
Copied verbatim from the original, typos and all, because facts don't get a glow-up:
#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);
...
that [ at the end up there? not my typo, bestie β the original said that, and we keep every character. iykyk. π
π FILES π
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)
Go read those next, they're the sequel π
β¨ AUTHOR β¨
- Steven Rostedt
<rostedt@goodmis.org><sup>[1]</sup>, author of libtraceevent. - Tzvetomir Stoyanov
<tz.stoyanov@gmail.com><sup>[2]</sup>, author of this man page.
Legends, both of them π
π¦ REPORTING BUGS π¦
Report bugs to <linux-trace-devel@vger.kernel.org><sup>[3]</sup>
Found a bug? Tell the mailing list, don't suffer in silence, bestie π«Ά
β LICENSE β
libtraceevent is Free Software licensed under the GNU LGPL 2.1
πΈ RESOURCES πΈ
https://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git/
π NOTES π
rostedt@goodmis.orgmailto:rostedt@goodmis.orgtz.stoyanov@gmail.commailto:tz.stoyanov@gmail.comlinux-trace-devel@vger.kernel.orgmailto:linux-trace-devel@vger.kernel.org
and that's the whole page, bestie π drop a kudos to libtraceevent 1.9.0, dated 06/15/2026 β she ate and left no crumbs, LIBTRACEEVENT(3) out. ππ
β¨
π¦ where this page comes from
- ubuntu stonking: libtraceevent-doc 1:1.9.0-2 Β· LGPL-2.1-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms