Я хотел бы прочитать непрерывный выходной поток команд, таких как tcpdump
, из программы на С ++.
#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;
}
Это дает мне только вывод первой строки tcpdump -i any -v
Я не хочу Write to file and read again
, как следует.
Сделайте tcpdump -i any -v -w myfile
, чтобы записать это в файл и постоянно читать