Вкратце: я хочу прочитать данные из терминала в переменную и сравнить их со строкой.
Лонг: Я использую плату разработки TI AM3358 от GOEMBED, на которой работает встроенный Linux. Я использую этот комплект для чтения данных с CANBUS. Чтобы прочитать данные из CANbus в терминал, я использую socketcan.
Когда я запускаю следующую команду в терминал, я получаю поток данных CAN-сообщений с шины.
candump can0
Я написал код, который выполняет указанную выше команду и возвращает результат.
string GetCmdOutput(const char * cmd)
{
char buffer[128];
string result = "";
string different;
FILE* pipe = popen(cmd,"r");
int counter=0;
if(!pipe) throw runtime_error("popen() failed!");
try {
if(fgets(buffer,128,pipe) !=NULL){
while(counter<1){
result +=buffer;
counter++;
}
}
}catch(...){
pclose(pipe);
throw;
}
pclose(pipe);
return result;
}
В int main () я запускаю следующий код, который сравнивает вывод терминала со строкой:
string dump = "candump can0";
const char *senddump;
senddump = dump.c_str();
string newOutput;
int senddata = 0;
int i = 0;
int x = 0;
int amountS = 0;
int y = 0;
string datas;
while(i<1)
{
newOutput = GetCmdOutput(senddump);
cout<<newOutput + "\n";
if(newOutput==" can0 000 [2] 01 12\n")
{
canWrite(busn,baudrate, sendID, dlcn,data[0],data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
}
}
Сам код работает, но я пропускаю много данных с канбуса. Я думаю, причина этого в том, что мне всегда нужно повторно инициализировать canbus (cmd -> candump can0).
Теперь мой вопрос: как изменить мой код, чтобы мне нужно было только запустить команду «candump can0», и чтобы код всегда сравнивал следующие сообщения со строкой. Если это возможно, я думаю, что уже добьюсь большого успеха.
Если у вас есть другие команды или другие возможности для повышения производительности, не стесняйтесь давать конструктивную критику. (Я не профессионал! Стараюсь учиться)
/ EDIT 1 / Следующий поток данных выводится в терминал.
can0 712 [1] 05
can0 192 [6] 1C 0F 19 00 00 00
can0 70B [1] 00
can0 70B [1] 85
can0 703 [1] 00
can0 707 [1] 00
can0 709 [1] 00
Заранее спасибо, С уважением, TMO