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