Я написал некоторый код, который использует 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
Задача ещё не решена.
Других решений пока нет …