1*287e80b3SSadaf Ebrahimilibtracefs(3) 2*287e80b3SSadaf Ebrahimi============= 3*287e80b3SSadaf Ebrahimi 4*287e80b3SSadaf EbrahimiNAME 5*287e80b3SSadaf Ebrahimi---- 6*287e80b3SSadaf Ebrahimitracefs_trace_pipe_stream, tracefs_trace_pipe_print, tracefs_trace_pipe_stop - 7*287e80b3SSadaf Ebrahimiredirect the stream of trace data to an output or stdout. 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 Ebrahimissize_t *tracefs_trace_pipe_stream*(int _fd_, struct tracefs_instance pass:[*]_instance_, int _flags_); 16*287e80b3SSadaf Ebrahimissize_t *tracefs_trace_pipe_print*(struct tracefs_instance pass:[*]_instance_, int _flags_); 17*287e80b3SSadaf Ebrahimivoid *tracefs_trace_pipe_stop*(struct tracefs_instance pass:[*]_instance_); 18*287e80b3SSadaf Ebrahimi 19*287e80b3SSadaf Ebrahimi 20*287e80b3SSadaf Ebrahimi-- 21*287e80b3SSadaf Ebrahimi 22*287e80b3SSadaf EbrahimiDESCRIPTION 23*287e80b3SSadaf Ebrahimi----------- 24*287e80b3SSadaf EbrahimiIf NULL is passed as _instance_, the top trace instance is used. 25*287e80b3SSadaf Ebrahimi 26*287e80b3SSadaf EbrahimiThe reading of the trace_pipe file can be stopped by calling *tracefs_trace_pipe_stop()* 27*287e80b3SSadaf Ebrahimiwhich could be placed in a signal handler in case the application wants to stop the 28*287e80b3SSadaf Ebrahimireading, for example, with the user pressing Ctrl-C. 29*287e80b3SSadaf Ebrahimi 30*287e80b3SSadaf EbrahimiThe *tracefs_trace_pipe_stream()* function redirects the stream of trace data to an output 31*287e80b3SSadaf Ebrahimifile. The "splice" system call is used to moves the data without copying between kernel 32*287e80b3SSadaf Ebrahimiaddress space and user address space. The _fd_ is the file descriptor of the output file 33*287e80b3SSadaf Ebrahimiand _flags_ is a bit mask of flags to be passed to the open system call of the trace_pipe 34*287e80b3SSadaf Ebrahimifile (see ). If flags contain O_NONBLOCK, then that is also passed to the splice calls 35*287e80b3SSadaf Ebrahimithat may read the file to the output stream file descriptor. 36*287e80b3SSadaf Ebrahimi 37*287e80b3SSadaf EbrahimiThe *tracefs_trace_pipe_print()* function is similar to *tracefs_trace_pipe_stream()*, but 38*287e80b3SSadaf Ebrahimithe stream of trace data is redirected to stdout. 39*287e80b3SSadaf Ebrahimi 40*287e80b3SSadaf Ebrahimi 41*287e80b3SSadaf EbrahimiRETURN VALUE 42*287e80b3SSadaf Ebrahimi------------ 43*287e80b3SSadaf EbrahimiThe *tracefs_trace_pipe_stream()*, and *tracefs_trace_pipe_print()* functions return the 44*287e80b3SSadaf Ebrahiminumber of bytes transfered if the operation is successful, or -1 in case of an error. 45*287e80b3SSadaf Ebrahimi 46*287e80b3SSadaf EbrahimiEXAMPLE 47*287e80b3SSadaf Ebrahimi------- 48*287e80b3SSadaf Ebrahimi[source,c] 49*287e80b3SSadaf Ebrahimi-- 50*287e80b3SSadaf Ebrahimi#include <stdio.h> 51*287e80b3SSadaf Ebrahimi#include <stdlib.h> 52*287e80b3SSadaf Ebrahimi#include <unistd.h> 53*287e80b3SSadaf Ebrahimi#include <signal.h> 54*287e80b3SSadaf Ebrahimi#include <fcntl.h> 55*287e80b3SSadaf Ebrahimi 56*287e80b3SSadaf Ebrahimi#include <tracefs.h> 57*287e80b3SSadaf Ebrahimi 58*287e80b3SSadaf Ebrahimivoid stop(int sig) 59*287e80b3SSadaf Ebrahimi{ 60*287e80b3SSadaf Ebrahimi tracefs_trace_pipe_stop(NULL); 61*287e80b3SSadaf Ebrahimi} 62*287e80b3SSadaf Ebrahimi 63*287e80b3SSadaf Ebrahimiint main(int argc, char **argv) 64*287e80b3SSadaf Ebrahimi{ 65*287e80b3SSadaf Ebrahimi mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH; 66*287e80b3SSadaf Ebrahimi const char *filename; 67*287e80b3SSadaf Ebrahimi int fd; 68*287e80b3SSadaf Ebrahimi int ret; 69*287e80b3SSadaf Ebrahimi 70*287e80b3SSadaf Ebrahimi if (argc < 2) { 71*287e80b3SSadaf Ebrahimi fprintf(stderr, "usage: %s output_file\n", argv[0]); 72*287e80b3SSadaf Ebrahimi exit(-1); 73*287e80b3SSadaf Ebrahimi } 74*287e80b3SSadaf Ebrahimi filename = argv[1]; 75*287e80b3SSadaf Ebrahimi fd = creat(filename, mode); 76*287e80b3SSadaf Ebrahimi if (fd < 0) { 77*287e80b3SSadaf Ebrahimi perror(filename); 78*287e80b3SSadaf Ebrahimi exit(-1); 79*287e80b3SSadaf Ebrahimi } 80*287e80b3SSadaf Ebrahimi signal(SIGINT, stop); 81*287e80b3SSadaf Ebrahimi ret = tracefs_trace_pipe_stream(fd, NULL, SPLICE_F_NONBLOCK); 82*287e80b3SSadaf Ebrahimi close(fd); 83*287e80b3SSadaf Ebrahimi 84*287e80b3SSadaf Ebrahimi return ret; 85*287e80b3SSadaf Ebrahimi} 86*287e80b3SSadaf Ebrahimi-- 87*287e80b3SSadaf EbrahimiFILES 88*287e80b3SSadaf Ebrahimi----- 89*287e80b3SSadaf Ebrahimi[verse] 90*287e80b3SSadaf Ebrahimi-- 91*287e80b3SSadaf Ebrahimi*tracefs.h* 92*287e80b3SSadaf Ebrahimi Header file to include in order to have access to the library APIs. 93*287e80b3SSadaf Ebrahimi*-ltracefs* 94*287e80b3SSadaf Ebrahimi Linker switch to add when building a program that uses the library. 95*287e80b3SSadaf Ebrahimi-- 96*287e80b3SSadaf Ebrahimi 97*287e80b3SSadaf EbrahimiSEE ALSO 98*287e80b3SSadaf Ebrahimi-------- 99*287e80b3SSadaf Ebrahimi*libtracefs*(3), 100*287e80b3SSadaf Ebrahimi*libtraceevent*(3), 101*287e80b3SSadaf Ebrahimi*trace-cmd*(1), 102*287e80b3SSadaf EbrahimiDocumentation/trace/ftrace.rst from the Linux kernel tree 103*287e80b3SSadaf Ebrahimi 104*287e80b3SSadaf EbrahimiAUTHOR 105*287e80b3SSadaf Ebrahimi------ 106*287e80b3SSadaf Ebrahimi[verse] 107*287e80b3SSadaf Ebrahimi-- 108*287e80b3SSadaf Ebrahimi*Steven Rostedt* <[email protected]> 109*287e80b3SSadaf Ebrahimi*Tzvetomir Stoyanov* <[email protected]> 110*287e80b3SSadaf Ebrahimi-- 111*287e80b3SSadaf EbrahimiREPORTING BUGS 112*287e80b3SSadaf Ebrahimi-------------- 113*287e80b3SSadaf EbrahimiReport bugs to <[email protected]> 114*287e80b3SSadaf Ebrahimi 115*287e80b3SSadaf EbrahimiLICENSE 116*287e80b3SSadaf Ebrahimi------- 117*287e80b3SSadaf Ebrahimilibtracefs is Free Software licensed under the GNU LGPL 2.1 118*287e80b3SSadaf Ebrahimi 119*287e80b3SSadaf EbrahimiRESOURCES 120*287e80b3SSadaf Ebrahimi--------- 121*287e80b3SSadaf Ebrahimihttps://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/ 122*287e80b3SSadaf Ebrahimi 123*287e80b3SSadaf EbrahimiCOPYING 124*287e80b3SSadaf Ebrahimi------- 125*287e80b3SSadaf EbrahimiCopyright \(C) 2021 VMware, Inc. Free use of this software is granted under 126*287e80b3SSadaf Ebrahimithe terms of the GNU Public License (GPL). 127