Search code examples
cpipeline

How to use write() or fwrite() for writing data to terminal (stdout)?


I am trying to speed up my C program to spit out data faster.
Currently I am using printf() to give some data to the outside world. It is a continuous stream of data, therefore I am unable to use return(data).

How can I use write() or fwrite() to give the data out to the console instead of file?

Overall my setup consist of program written in C and its output goes to the python script, where the data is processed further. I form a pipe:

./program_in_c | script_in_python

This gives additional benefit on Raspberry Pi by using more of processor's cores.


Solution

  • #include <unistd.h>
    
           ssize_t write(int fd, const void *buf, size_t count);
    

    write() writes up to count bytes from the buffer starting at buf to the file referred to by the file descriptor fd.

    the standard output file descriptor is: 1 in linux at least! concern using flush the stdoutput buffer as well, before calling to write system call to ensure that all previous garabge was cleaned

    fflush(stdout); // Will now print everything in the stdout buffer
    write(1, buf, count);
    

    using fwrite:

    size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
    

    The function fwrite() writes nmemb items of data, each size bytes long, to the stream pointed to by stream, obtaining them from the location given by ptr.

    fflush(stdout);
    int buf[8];
    fwrite(buf, sizeof(int), sizeof(buf), stdout);
    

    Please refare to man pages for further reading, in the links below:

    fwrite

    write