xref: /aosp_15_r20/external/libtracefs/Documentation/libtracefs-instances-files.txt (revision 287e80b3a36113050663245e7f2c00d274188f18)
1*287e80b3SSadaf Ebrahimilibtracefs(3)
2*287e80b3SSadaf Ebrahimi=============
3*287e80b3SSadaf Ebrahimi
4*287e80b3SSadaf EbrahimiNAME
5*287e80b3SSadaf Ebrahimi----
6*287e80b3SSadaf Ebrahimitracefs_file_exists, tracefs_dir_exists,
7*287e80b3SSadaf Ebrahimitracefs_instance_get_file, tracefs_instance_get_dir - Work with files directories in tracing instances.
8*287e80b3SSadaf Ebrahimi
9*287e80b3SSadaf EbrahimiSYNOPSIS
10*287e80b3SSadaf Ebrahimi--------
11*287e80b3SSadaf Ebrahimi[verse]
12*287e80b3SSadaf Ebrahimi--
13*287e80b3SSadaf Ebrahimi*#include <tracefs.h>*
14*287e80b3SSadaf Ebrahimi
15*287e80b3SSadaf Ebrahimibool *tracefs_file_exists*(struct tracefs_instance pass:[*]_instance_, char pass:[*]_name_);
16*287e80b3SSadaf Ebrahimibool *tracefs_dir_exists*(struct tracefs_instance pass:[*]_instance_, char pass:[*]_name_);
17*287e80b3SSadaf Ebrahimichar pass:[*]*tracefs_instance_get_file*(struct tracefs_instance pass:[*]_instance_, const char pass:[*]_file_);
18*287e80b3SSadaf Ebrahimichar pass:[*]*tracefs_instance_get_dir*(struct tracefs_instance pass:[*]_instance_);
19*287e80b3SSadaf Ebrahimi
20*287e80b3SSadaf Ebrahimi--
21*287e80b3SSadaf Ebrahimi
22*287e80b3SSadaf EbrahimiDESCRIPTION
23*287e80b3SSadaf Ebrahimi-----------
24*287e80b3SSadaf EbrahimiThis set of APIs can be used to work with trace files in all trace instances.
25*287e80b3SSadaf EbrahimiEach of these APIs take an _instance_ argument, that can be NULL to act
26*287e80b3SSadaf Ebrahimion the top level instance. Otherwise, it acts on an instance created with
27*287e80b3SSadaf Ebrahimi*tracefs_insance_create*(3)
28*287e80b3SSadaf Ebrahimi
29*287e80b3SSadaf EbrahimiThe *tracefs_file_exists()* function checks if a file with _name_ exists in _instance_.
30*287e80b3SSadaf Ebrahimi
31*287e80b3SSadaf EbrahimiThe *tracefs_dir_exists()* function checks if a directory with _name_ exists in _instance_.
32*287e80b3SSadaf Ebrahimi
33*287e80b3SSadaf EbrahimiThe *tracefs_instance_get_file()* function returns the full path of the file
34*287e80b3SSadaf Ebrahimiwith given _name_ in _instance_. Note, it does not check if the file exists in
35*287e80b3SSadaf Ebrahimithe instance.
36*287e80b3SSadaf Ebrahimi
37*287e80b3SSadaf EbrahimiThe *tracefs_instance_get_dir()* function  returns the full path of the directory
38*287e80b3SSadaf Ebrahimiwith given _name_ in _instance_. Note, it does not check if the directory exists
39*287e80b3SSadaf Ebrahimiin the instance.
40*287e80b3SSadaf Ebrahimi
41*287e80b3SSadaf EbrahimiRETURN VALUE
42*287e80b3SSadaf Ebrahimi------------
43*287e80b3SSadaf EbrahimiThe *tracefs_file_exists()* and *tracefs_dir_exists()* functions return true if the
44*287e80b3SSadaf Ebrahimifile / directory exist in the given instance or false if it does not exist.
45*287e80b3SSadaf Ebrahimi
46*287e80b3SSadaf EbrahimiThe *tracefs_instance_get_file()* and *tracefs_instance_get_dir()* functions return
47*287e80b3SSadaf Ebrahimia string or NULL in case of an error. The returned string must be freed with
48*287e80b3SSadaf Ebrahimi*tracefs_put_tracing_file()*.
49*287e80b3SSadaf Ebrahimi
50*287e80b3SSadaf EbrahimiEXAMPLE
51*287e80b3SSadaf Ebrahimi-------
52*287e80b3SSadaf Ebrahimi[source,c]
53*287e80b3SSadaf Ebrahimi--
54*287e80b3SSadaf Ebrahimi#include <tracefs.h>
55*287e80b3SSadaf Ebrahimi
56*287e80b3SSadaf Ebrahimistruct tracefs_instance *inst = tracefs_instance_create("foo");
57*287e80b3SSadaf Ebrahimi	if (!inst) {
58*287e80b3SSadaf Ebrahimi		/* Error creating a new trace instance */
59*287e80b3SSadaf Ebrahimi		...
60*287e80b3SSadaf Ebrahimi	}
61*287e80b3SSadaf Ebrahimi
62*287e80b3SSadaf Ebrahimi	if (tracefs_file_exists(inst,"trace_clock")) {
63*287e80b3SSadaf Ebrahimi		/* The instance foo supports trace clock */
64*287e80b3SSadaf Ebrahimi		char *path, *clock;
65*287e80b3SSadaf Ebrahimi		int size;
66*287e80b3SSadaf Ebrahimi
67*287e80b3SSadaf Ebrahimi		path =  = tracefs_instance_get_file(inst, "trace_clock")
68*287e80b3SSadaf Ebrahimi		if (!path) {
69*287e80b3SSadaf Ebrahimi			/* Error getting the path to trace_clock file in instance foo */
70*287e80b3SSadaf Ebrahimi			...
71*287e80b3SSadaf Ebrahimi		}
72*287e80b3SSadaf Ebrahimi		...
73*287e80b3SSadaf Ebrahimi		tracefs_put_tracing_file(path);
74*287e80b3SSadaf Ebrahimi
75*287e80b3SSadaf Ebrahimi		clock = tracefs_instance_file_read(inst, "trace_clock", &size);
76*287e80b3SSadaf Ebrahimi		if (!clock) {
77*287e80b3SSadaf Ebrahimi			/* Failed to read trace_clock file in instance foo */
78*287e80b3SSadaf Ebrahimi			...
79*287e80b3SSadaf Ebrahimi		}
80*287e80b3SSadaf Ebrahimi		...
81*287e80b3SSadaf Ebrahimi		free(clock);
82*287e80b3SSadaf Ebrahimi
83*287e80b3SSadaf Ebrahimi		if (tracefs_instance_file_write(inst, "trace_clock", "global") != strlen("global")) {
84*287e80b3SSadaf Ebrahimi			/* Failed to set gloabl trace clock in instance foo */
85*287e80b3SSadaf Ebrahimi			...
86*287e80b3SSadaf Ebrahimi		}
87*287e80b3SSadaf Ebrahimi	} else {
88*287e80b3SSadaf Ebrahimi		/* The instance foo does not support trace clock */
89*287e80b3SSadaf Ebrahimi	}
90*287e80b3SSadaf Ebrahimi
91*287e80b3SSadaf Ebrahimi	if (tracefs_dir_exists(inst,"options")) {
92*287e80b3SSadaf Ebrahimi		/* The instance foo supports trace options */
93*287e80b3SSadaf Ebrahimi		char *path = tracefs_instance_get_file(inst, "options");
94*287e80b3SSadaf Ebrahimi		if (!path) {
95*287e80b3SSadaf Ebrahimi			/* Error getting the path to options directory in instance foo */
96*287e80b3SSadaf Ebrahimi			...
97*287e80b3SSadaf Ebrahimi		}
98*287e80b3SSadaf Ebrahimi
99*287e80b3SSadaf Ebrahimi		tracefs_put_tracing_file(path);
100*287e80b3SSadaf Ebrahimi	} else {
101*287e80b3SSadaf Ebrahimi		/* The instance foo does not support trace options */
102*287e80b3SSadaf Ebrahimi	}
103*287e80b3SSadaf Ebrahimi
104*287e80b3SSadaf Ebrahimi	...
105*287e80b3SSadaf Ebrahimi
106*287e80b3SSadaf Ebrahimi	if (tracefs_instance_is_new(inst))
107*287e80b3SSadaf Ebrahimi		tracefs_instance_destroy(inst);
108*287e80b3SSadaf Ebrahimi	else
109*287e80b3SSadaf Ebrahimi		tracefs_instance_free(inst);
110*287e80b3SSadaf Ebrahimi	...
111*287e80b3SSadaf Ebrahimi
112*287e80b3SSadaf Ebrahimi	long long int res;
113*287e80b3SSadaf Ebrahimi	if (tracefs_instance_file_read_number(NULL, "tracing_on", &res) == 0) {
114*287e80b3SSadaf Ebrahimi		if (res == 0) {
115*287e80b3SSadaf Ebrahimi			/* tracing is disabled in the top instance */
116*287e80b3SSadaf Ebrahimi		} else if (res == 1) {
117*287e80b3SSadaf Ebrahimi			/* tracing is enabled in the top instance */
118*287e80b3SSadaf Ebrahimi		} else {
119*287e80b3SSadaf Ebrahimi			/* Unknown tracing state of the top instance */
120*287e80b3SSadaf Ebrahimi		}
121*287e80b3SSadaf Ebrahimi	} else {
122*287e80b3SSadaf Ebrahimi		/* Failed to read integer from tracing_on file */
123*287e80b3SSadaf Ebrahimi	}
124*287e80b3SSadaf Ebrahimi
125*287e80b3SSadaf Ebrahimi	...
126*287e80b3SSadaf Ebrahimi
127*287e80b3SSadaf Ebrahimi	int fd;
128*287e80b3SSadaf Ebrahimi	fd = tracefs_instance_file_open(NULL, "tracing_on", O_WRONLY);
129*287e80b3SSadaf Ebrahimi	if (fd >= 0) {
130*287e80b3SSadaf Ebrahimi		/* Got file descriptor to the tracing_on file from the top instance for writing */
131*287e80b3SSadaf Ebrahimi		...
132*287e80b3SSadaf Ebrahimi		close(fd);
133*287e80b3SSadaf Ebrahimi	}
134*287e80b3SSadaf Ebrahimi--
135*287e80b3SSadaf EbrahimiFILES
136*287e80b3SSadaf Ebrahimi-----
137*287e80b3SSadaf Ebrahimi[verse]
138*287e80b3SSadaf Ebrahimi--
139*287e80b3SSadaf Ebrahimi*tracefs.h*
140*287e80b3SSadaf Ebrahimi	Header file to include in order to have access to the library APIs.
141*287e80b3SSadaf Ebrahimi*-ltracefs*
142*287e80b3SSadaf Ebrahimi	Linker switch to add when building a program that uses the library.
143*287e80b3SSadaf Ebrahimi--
144*287e80b3SSadaf Ebrahimi
145*287e80b3SSadaf EbrahimiSEE ALSO
146*287e80b3SSadaf Ebrahimi--------
147*287e80b3SSadaf Ebrahimi*libtracefs*(3),
148*287e80b3SSadaf Ebrahimi*libtraceevent*(3),
149*287e80b3SSadaf Ebrahimi*trace-cmd*(1)
150*287e80b3SSadaf Ebrahimi
151*287e80b3SSadaf EbrahimiAUTHOR
152*287e80b3SSadaf Ebrahimi------
153*287e80b3SSadaf Ebrahimi[verse]
154*287e80b3SSadaf Ebrahimi--
155*287e80b3SSadaf Ebrahimi*Steven Rostedt* <[email protected]>
156*287e80b3SSadaf Ebrahimi*Tzvetomir Stoyanov* <[email protected]>
157*287e80b3SSadaf Ebrahimi--
158*287e80b3SSadaf EbrahimiREPORTING BUGS
159*287e80b3SSadaf Ebrahimi--------------
160*287e80b3SSadaf EbrahimiReport bugs to  <[email protected]>
161*287e80b3SSadaf Ebrahimi
162*287e80b3SSadaf EbrahimiLICENSE
163*287e80b3SSadaf Ebrahimi-------
164*287e80b3SSadaf Ebrahimilibtracefs is Free Software licensed under the GNU LGPL 2.1
165*287e80b3SSadaf Ebrahimi
166*287e80b3SSadaf EbrahimiRESOURCES
167*287e80b3SSadaf Ebrahimi---------
168*287e80b3SSadaf Ebrahimihttps://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/
169*287e80b3SSadaf Ebrahimi
170*287e80b3SSadaf EbrahimiCOPYING
171*287e80b3SSadaf Ebrahimi-------
172*287e80b3SSadaf EbrahimiCopyright \(C) 2020 VMware, Inc. Free use of this software is granted under
173*287e80b3SSadaf Ebrahimithe terms of the GNU Public License (GPL).
174