LIBTRACEFS(3)
π LIBTRACEFS(3) β the libtracefs manual, bestie edition π
okay so we're deep in the libtracefs manual rn and this page is all about yeeting your kernel trace data straight into a file or straight to stdout. no cap, it's giving plumbing-that-slaps. π
β¨ NAME β¨
tracefs_trace_pipe_stream, tracefs_trace_pipe_print, tracefs_trace_pipe_stop β these three besties redirect the stream of trace data to an output or stdout. literally their whole personality. π«Ά
β¨ SYNOPSIS β¨
#include <tracefs.h>
ssize_t tracefs_trace_pipe_stream(int fd, struct tracefs_instance *instance, int flags);
ssize_t tracefs_trace_pipe_print(struct tracefs_instance *instance, int flags);
void tracefs_trace_pipe_stop(struct tracefs_instance *instance);
β¨ DESCRIPTION β¨
first things first: if NULL is passed as instance, the top trace instance is used. iconic default behaviour, honestly. π
so the reading of the trace_pipe file can be stopped by calling tracefs_trace_pipe_stop(), and the moveβ’ is to put that call inside a signal handler β you know, in case your app wants to stop the reading, like when the user presses Ctrl+C. very "let me gracefully exit the group chat" energy. π
tracefs_trace_pipe_stream() redirects the stream of trace data to an output file. and like, how does it go so fast? the "splice" system call is used to move the data without copying between kernel address space and user address space. efficiency queen. β¨ fd is the file descriptor of the output file, and flags is a bit mask of flags to be passed to the open system call of the trace_pipe file (see open(2)). if flags contain O_NONBLOCK, then that is also passed to the splice calls that may read the file to the output stream file descriptor. π note: O_RDONLY is or'd to the flags and only O_NONBLOCK is useful for this parameter β everything else is just decorative, bestie.
tracefs_trace_pipe_print() is similar to tracefs_trace_pipe_stream(), but the stream of trace data is redirected to stdout. same vibe, but it goes straight to your terminal. π₯οΈπ
β¨ RETURN VALUE β¨
tracefs_trace_pipe_stream() and tracefs_trace_pipe_print() return the number of bytes transfered if the operation is successful, or -1 in case of an error. simple. slay. π
β¨ EXAMPLE β¨
here's a whole little main character program, copy it and go off:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <signal.h>
#include <fcntl.h>
#include <tracefs.h>
void stop(int sig)
{
tracefs_trace_pipe_stop(NULL);
}
int main(int argc, char **argv)
{
mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
const char *filename;
int fd;
int ret;
if (argc < 2) {
fprintf(stderr, "usage: %s output_file\n", argv[0]);
exit(-1);
}
filename = argv[1];
fd = creat(filename, mode);
if (fd < 0) {
perror(filename);
exit(-1);
}
signal(SIGINT, stop);
ret = tracefs_trace_pipe_stream(fd, NULL, SPLICE_F_NONBLOCK);
close(fd);
return ret;
}
β¨ FILES β¨
tracefs.hβ header file to include in order to have access to the library APIs. yes you need it, no you can't skip it. π-ltracefsβ linker switch to add when building a program that uses the library. put it in your build, bestie, or nothing links. π
β¨ SEE ALSO β¨
libtracefs(3)libtraceevent(3)trace-cmd(1)Documentation/trace/ftrace.rstfrom the Linux kernel tree
go read them, they're literally the extended universe. πβ¨
β¨ AUTHOR β¨
- Steven Rostedt
<rostedt@goodmis.org[1]> - Tzvetomir Stoyanov
<tz.stoyanov@gmail.com[2]>
legends, honestly. π
β¨ REPORTING BUGS β¨
Report bugs to <linux-trace-devel@vger.kernel.org[3]>. don't be shy, they want to know. ππ
β¨ LICENSE β¨
libtracefs is Free Software licensed under the GNU LGPL 2.1. no cap. βοΈ
β¨ RESOURCES β¨
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
the source repo, go lurk. π΅οΈββοΈ
β¨ COPYING β¨
Copyright (C) 2021 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL). π
β¨ 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
okay that's the whole page, hope it ate π
β this was libtracefs 1.8.4, dated 10/21/2026, signing off with a lil π¦ and a reminder that you're doing amazing, bestie. periodt. ππ
π¦ where this page comes from
- arch rolling: libtracefs 1.8.4-1 Β· GPL-2.0-only AND LGPL-2.1-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms