LIBTRACEFS(3)
π LIBTRACEFS(3) β bestie's guide to the libtracefs manual page β¨
okay so this whole page is out of the libtracefs manual (yeah, the libtracefs Manual one, iykyk) and it's literally all about poking at files and directories inside tracing instances π¦ like... the humble little building blocks of everything. no cap.
πΈ NAME πΈ
tracefs_file_exists, tracefs_dir_exists, tracefs_instance_get_file, tracefs_instance_get_dir β working with files and directories in tracing instances, that's the whole vibe π
β¨ SYNOPSIS β¨
#include <tracefs.h>
bool tracefs_file_exists(struct tracefs_instance *instance, char *name);
bool tracefs_dir_exists(struct tracefs_instance *instance, char *name);
char *tracefs_instance_get_file(struct tracefs_instance *instance, const char *file);
char *tracefs_instance_get_dir(struct tracefs_instance *instance);
look at her. iconic signatures. no notes π
π DESCRIPTION π
so this whole little family of APIs is for working with trace files in all trace instances, periodt. every single one of these takes an instance argument, and here's the tea: you can pass NULL and it'll act on the top level instance π«Ά otherwise it acts on an instance you made with tracefs_insance_create(3).
tracefs_file_exists()β checks if a file withnameexists ininstanceπtracefs_dir_exists()β checks if a directory withnameexists ininstanceπtracefs_instance_get_file()β returns the full path of the file with the givennameininstance. but bestie, heads up: it does not check if the file actually exists in the instance π it just gives you the path, main character energytracefs_instance_get_dir()β returns the full path of the directory with the givennameininstance. and same warning, fr fr: it does not check if the directory exists in the instance π
π RETURN VALUE π
tracefs_file_exists() and tracefs_dir_exists() return true if the file / directory exists in the given instance, or false if it does not π simple as.
tracefs_instance_get_file() and tracefs_instance_get_dir() return a string, or NULL in case of an error π and you MUST free the returned string with tracefs_put_tracing_file() β don't leave her hanging, that's so rude π
π₯ EXAMPLE π₯
here's the whole thing, verbatim, because we do not gatekeep π
#include <tracefs.h>
struct tracefs_instance *inst = tracefs_instance_create("foo");
if (!inst) {
/* Error creating a new trace instance */
...
}
if (tracefs_file_exists(inst,"trace_clock")) {
/* The instance foo supports trace clock */
char *path, *clock;
int size;
path = = tracefs_instance_get_file(inst, "trace_clock")
if (!path) {
/* Error getting the path to trace_clock file in instance foo */
...
}
...
tracefs_put_tracing_file(path);
clock = tracefs_instance_file_read(inst, "trace_clock", &size);
if (!clock) {
/* Failed to read trace_clock file in instance foo */
...
}
...
free(clock);
if (tracefs_instance_file_write(inst, "trace_clock", "global") != strlen("global")) {
/* Failed to set gloabl trace clock in instance foo */
...
}
} else {
/* The instance foo does not support trace clock */
}
if (tracefs_dir_exists(inst,"options")) {
/* The instance foo supports trace options */
char *path = tracefs_instance_get_file(inst, "options");
if (!path) {
/* Error getting the path to options directory in instance foo */
...
}
tracefs_put_tracing_file(path);
} else {
/* The instance foo does not support trace options */
}
...
if (tracefs_instance_is_new(inst))
tracefs_instance_destroy(inst);
else
tracefs_instance_free(inst);
...
long long int res;
if (tracefs_instance_file_read_number(NULL, "tracing_on", &res) == 0) {
if (res == 0) {
/* tracing is disabled in the top instance */
} else if (res == 1) {
/* tracing is enabled in the top instance */
} else {
/* Unknown tracing state of the top instance */
}
} else {
/* Failed to read integer from tracing_on file */
}
...
int fd;
fd = tracefs_instance_file_open(NULL, "tracing_on", O_WRONLY);
if (fd >= 0) {
/* Got file descriptor to the tracing_on file from the top instance for writing */
...
close(fd);
}
(and yeah, path = = and "gloabl" are in there exactly like that, we're preserving the lore π«‘ don't come for me, I just work here π)
π§ FILES π§
tracefs.hβ the header file to include so you actually get access to the library APIs π-ltracefsβ the linker switch you add when building a program that uses the library π
π¦ SEE ALSO π¦
libtracefs(3), libtraceevent(3), trace-cmd(1)
go read those too, bestie, the crossover episode is real π
β AUTHOR β
- Steven Rostedt
<rostedt@goodmis.org[1]> - Tzvetomir Stoyanov
<tz.stoyanov@gmail.com[2]>
absolute legends, tbh π
π REPORTING BUGS π
Report bugs to <linux-trace-devel@vger.kernel.org[3]> β they genuinely want to hear it, no cap π
πΈ LICENSE πΈ
libtracefs is Free Software licensed under the GNU LGPL 2.1 π
π RESOURCES π
https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
π COPYING π
Copyright (C) 2020 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 and that's the whole page!! π«Ά it's libtracefs 1.8.4, dated 10/21/2026 β put that in your calendar bestie, mwah π β¨
π¦ 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