libtracecmd(3) ============= NAME ---- tracecmd_read_cpu_first, tracecmd_read_data, tracecmd_read_at, tracecmd_free_record, tracecmd_get_tep - Read recorded events from a trace file. SYNOPSIS -------- [verse] -- *#include * struct tep_record pass:[*]*tracecmd_read_cpu_first*(struct tracecmd_input pass:[*]_handle_, int _cpu_); struct tep_record pass:[*]*tracecmd_read_data*(struct tracecmd_input pass:[*]_handle_, int _cpu_); struct tep_record pass:[*]*tracecmd_read_at*(struct tracecmd_input pass:[*]_handle_, unsigned long long _offset_, int pass:[*]_cpu_); void *tracecmd_free_record*(struct tep_record pass:[*]_record_); struct tep_handle pass:[*]*tracecmd_get_tep*(struct tracecmd_input pass:[*]_handle_); -- DESCRIPTION ----------- This set of APIs can be used to read tracing data from a trace file opened with *tracecmd_open()(3)*, *tracecmd_open_fd()(3)* or *tracecmd_open_head()(3)*. The *tracecmd_read_cpu_first()* function reads the first trace record for a given _cpu_ from a trace file associated with _handle_. The returned record must be freed with *tracecmd_free_record()*. The *tracecmd_read_data()* function reads the next trace record for a given _cpu_ from a trace file associated with _handle_ and increments the read location pointer, so that the next call to *tracecmd_read_data()* will not read the same record again. The returned record must be freed with *tracecmd_free_record()*. The *tracecmd_read_at()* function reads a trace record from a specific _offset_ within the file associated with _handle_. The CPU on which the recorded event occurred is stored in the _cpu_. The function does not change the current read location pointer. The returned record must be freed with *tracecmd_free_record()*. The *tracecmd_free_record()* function frees a _record_ returned by any of the _tracecmd_read__ APIs. The *tracecmd_get_tep()* function returns a tep context for a given _handle_. RETURN VALUE ------------ The *tracecmd_read_cpu_first()*, *tracecmd_read_data()* and *tracecmd_read_at()* functions return a pointer to struct tep_record or NULL in case of an error.The returned record must be freed with *tracecmd_free_record()*. The *tracecmd_get_tep()* function returns a pointer to tep context or NULL if there is no tep context for the given _handle_. The returned tep pointer must *not* be freed. EXAMPLE ------- [source,c] -- #include ... struct tracecmd_input *handle = tracecmd_open("trace.dat"); if (!handle) { /* Failed to open trace.dat file */ } ... unsigned long long offset = 0; struct tep_record *rec; int cpu = 0; rec = tracecmd_read_cpu_first(handle, cpu); while (rec) { ... if ( /* some interesting record noticed */) { /* store the offset of the interesting record */ offset = rec->offset; } ... tracecmd_free_record(rec); rec = tracecmd_read_data(handle, cpu); } ... if (offset) { rec = tracecmd_read_at(handle, offset, &cpu); if (rec) { /* Got record at offset on cpu */ ... tracecmd_free_record(rec); } } ... tracecmd_close(hadle); -- FILES ----- [verse] -- *trace-cmd.h* Header file to include in order to have access to the library APIs. *-ltracecmd* Linker switch to add when building a program that uses the library. -- SEE ALSO -------- *libtracefs(3)*, *libtraceevent(3)*, *trace-cmd(1)* *trace-cmd.dat(5)* AUTHOR ------ [verse] -- *Steven Rostedt* *Tzvetomir Stoyanov* -- REPORTING BUGS -------------- Report bugs to LICENSE ------- libtracecmd is Free Software licensed under the GNU LGPL 2.1 RESOURCES --------- https://git.kernel.org/pub/scm/utils/trace-cmd/trace-cmd.git/ COPYING ------- Copyright \(C) 2020 VMware, Inc. Free use of this software is granted under the terms of the GNU Public License (GPL).