libtraceevent(3)
================

NAME
----
tep_find_event,tep_find_event_by_name,tep_find_event_by_record -
Find events by given key.

SYNOPSIS
--------
[verse]
--
*#include <event-parse.h>*

struct tep_event pass:[*]*tep_find_event*(struct tep_handle pass:[*]_tep_, int _id_);
struct tep_event pass:[*]*tep_find_event_by_name*(struct tep_handle pass:[*]_tep_, const char pass:[*]_sys_, const char pass:[*]_name_);
struct tep_event pass:[*]*tep_find_event_by_record*(struct tep_handle pass:[*]_tep_, struct tep_record pass:[*]_record_);
--

DESCRIPTION
-----------
This set of functions can be used to search for an event, based on a given
criteria. All functions require a pointer to a _tep_, trace event parser
context.

The _tep_find_event()_ function searches for an event by given event _id_. The
event ID is assigned dynamically and can be viewed in event's format file,
"ID" field.

The tep_find_event_by_name()_ function searches for an event by given
event _name_, under the system _sys_. If the _sys_ is NULL (not specified),
the first event with _name_ is returned.

The tep_find_event_by_record()_ function searches for an event from a given
_record_.

RETURN VALUE
------------
All these functions return a pointer to the found event, or NULL if there is no
such event.

EXAMPLE
-------
[source,c]
--
#include <event-parse.h>
...
struct tep_handle *tep = tep_alloc();
...
struct tep_event *event;

event = tep_find_event(tep, 1857);
if (event == NULL) {
	/* There is no event with ID 1857 */
}

event = tep_find_event_by_name(tep, "kvm", "kvm_exit");
if (event == NULL) {
	/* There is no kvm_exit event, from kvm system */
}

void event_from_record(struct tep_record *record)
{
 struct tep_event *event = tep_find_event_by_record(tep, record);
	if (event == NULL) {
		/* There is no event from given record */
	}
}
...
--

FILES
-----
[verse]
--
*event-parse.h*
	Header file to include in order to have access to the library APIs.
*-ltraceevent*
	Linker switch to add when building a program that uses the library.
--

SEE ALSO
--------
_libtraceevent(3)_, _trace-cmd(1)_

AUTHOR
------
[verse]
--
*Steven Rostedt* <rostedt@goodmis.org>, author of *libtraceevent*.
*Tzvetomir Stoyanov* <tz.stoyanov@gmail.com>, author of this man page.
--
REPORTING BUGS
--------------
Report bugs to  <linux-trace-devel@vger.kernel.org>

LICENSE
-------
libtraceevent is Free Software licensed under the GNU LGPL 2.1

RESOURCES
---------
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
