# tracefs_trace_pipe_stream

## NAME



           tracefs_trace_pipe_stream, tracefs_trace_pipe_print,
           tracefs_trace_pipe_stop - redirect the stream of trace data to an
           output or stdout.
    


## SYNOPSIS



           **#include <tracefs.h>**
    
           ssize_t **tracefs_trace_pipe_stream**(int _fd_ , struct tracefs_instance *_instance_ , int _flags_);
           ssize_t **tracefs_trace_pipe_print**(struct tracefs_instance *_instance_ , int _flags_);
           void **tracefs_trace_pipe_stop**(struct tracefs_instance *_instance_);
    


## DESCRIPTION



           If NULL is passed as _instance_ , the top trace instance is used.
    
           The reading of the trace_pipe file can be stopped by calling
           **tracefs_trace_pipe_stop()** which could be placed in a signal
           handler in case the application wants to stop the reading, for
           example, with the user pressing Ctrl-C.
    
           The **tracefs_trace_pipe_stream()** function redirects the stream of
           trace data to an output file. The "splice" system call is used to
           moves the data without copying between kernel address space and
           user address space. The _fd_ is the file descriptor of the output
           file and _flags_ is a bit mask of flags to be passed to the open
           system call of the trace_pipe file (see open(2)). If flags contain
           O_NONBLOCK, then that is also passed to the splice calls that may
           read the file to the output stream file descriptor. Note, O_RDONLY
           is or’d to the _flags_ and only O_NONBLOCK is useful for this
           parameter.
    
           The **tracefs_trace_pipe_print()** function is similar to
           **tracefs_trace_pipe_stream()** , but the stream of trace data is
           redirected to stdout.
    


## RETURN VALUE



           The **tracefs_trace_pipe_stream()** , and **tracefs_trace_pipe_print()**
           functions return the number of bytes transfered if the operation
           is successful, or -1 in case of an error.
    


## EXAMPLE



               #include <stdio.h>
               #include <stdlib.h>
               #include <unistd.h>
               #include <signal.h>
               #include <fcntl.h>
    
               #include <tracefs.h>
    
               void stop(int sig)
               {
                       tracefs_trace_pipe_stop(NULL);
               }
    
               int main(int argc, char **argv)
               {
                       mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
                       const char *filename;
                       int fd;
                       int ret;
    
                       if (argc < 2) {
                               fprintf(stderr, "usage: %s output_file\n", argv[0]);
                               exit(-1);
                       }
                       filename = argv[1];
                       fd = creat(filename, mode);
                       if (fd < 0) {
                               perror(filename);
                               exit(-1);
                       }
                       signal(SIGINT, stop);
                       ret = tracefs_trace_pipe_stream(fd, NULL, SPLICE_F_NONBLOCK);
                       close(fd);
    
                       return ret;
               }
    


## FILES



               **tracefs.h**
                       Header file to include in order to have access to the library APIs.
               **-ltracefs**
                       Linker switch to add when building a program that uses the library.
    


## LICENSE



           libtracefs is Free Software licensed under the GNU LGPL 2.1
    


## RESOURCES



           **https://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git/ **
    


## COPYING



           Copyright (C) 2021 VMware, Inc. Free use of this software is
           granted under the terms of the GNU Public License (GPL).
    


## NOTES



            1. rostedt@goodmis.org
               mailto:rostedt@goodmis.org
    
            2. tz.stoyanov@gmail.com
               mailto:tz.stoyanov@gmail.com
    
            3. linux-trace-devel@vger.kernel.org
               mailto:linux-trace-devel@vger.kernel.org
    


* * *