C ++ Читать текст из терминала Linux и сравнивать со строкой

Я написал некоторый код, который использует socketcan (чтобы сделать Candump). С этим кодом я инициализирую socketcan. После того, как он инициализирован, я создаю Candump в терминале. Эти значения я читаю в переменную. Теперь я хотел бы сравнить эту переменную со строкой.

Строка имеет определенный формат. Когда я запускаю Candump вручную, я получаю следующий формат:

can0 71A [1] 7F

(2x пробел) can0 (2x пробел) 71A (3x пробел) [1] (2x пробел) 7F.

Я могу прочитать вывод терминала в переменную (результат)

string result = //the string is loaded

** Теперь я хочу выполнить некоторый код, когда текст в переменной «result» не равен следующей строке:

"  can0  71A   [1]  7F"

Следующий фрагмент кода предназначен для сравнения.

if(result!="  can0  71A   [1]  7F"){
cout<<"input changes";
}

Когда я выполняю этот код и отправляю его на шину, следующая строка. Который такой же, как указано выше:

"  can0  71A   [1]  7F"

код печатает:

"input changes"

(Обычно это не должно ничего печатать)

Когда я отправляю следующую строку в автобусе:

"  can0  19B   [1]  6A"

Он также печатает:
«входные изменения»

(и это хорошо)

Я пытался изменить пробелы на вкладки, но безрезультатно.

Есть идеи, в чем может быть проблема и как ее решить?

* Редактировать 1 *
Ниже приведен мой код для чтения значения в переменную «результат».
(Если вы видите другие глупости в моем коде, пожалуйста, не стесняйтесь высказывать конструктивную критику! Я хочу учиться на своих проектах.)

    std::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<2){

result +=buffer;
cout<<result + "\n";
if(result!="  can0  71A   [1]  7F" || result != "  can0  71A   [1]  04" )
{
cout<<"changed!\n";
different = result;
}
}
}catch(...){
pclose(pipe);
throw;
}

pclose(pipe);
pauseCan();
return different;
}

С уважением,
TM

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]