I would like to read the continuous output stream of commands like tcpdump from within a c++ program.
#include <iostream>
#include <string>
#include <stdio.h>
std::string outputcmd(std::string cmd){
    std::string data;
    char singlelinedata[1024];
    FILE * streamdata;
    streamdata = popen(cmd.c_str(), "r");
    cmd.append(" 2>&1");
    std::cout << feof(streamdata);
    if(streamdata){
        while(!feof(streamdata)){
            // if(fgets(singlelinedata, 1024, streamdata)  != NULL ){
            //     data.append(singlelinedata);
            // }
            if(fread(singlelinedata, 1024, sizeof(singlelinedata)/sizeof(singlelinedata),streamdata)){
                data.append(singlelinedata);
            }
        }
        pclose(streamdata);
    }
    return data;
}
int main(){
    std::string outp;
    outp = outputcmd("sudo tcpdump -i any -v");
    std::cout << outp;
    return 0;
}
It is giving me only the first line output of tcpdump -i any -v
I dont want to Write to file and read again like following.
Make tcpdump -i any -v -w myfile to get it written on file and read continously

