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