简短:我想将终端中的数据读入一个变量并将其与字符串进行比较。
Long:我使用的是来自 GOEMBED 的 TI AM3358 开发板,它运行嵌入式 linux。我使用这个工具包从 canbus 读取数据。要将数据从 canbus 读入终端,我使用 socketcan。
当我在终端中运行以下命令时,我会从总线得到一个罐头消息的数据流。
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 的很多数据。我认为这样做的原因是我总是需要重新初始化canbus(cmd --> candump can0)。
现在我的问题是:如何更改我只需要运行命令“candump can0”并且代码总是将下一个messafes与字符串进行比较的代码。如果这是可能的,我想我已经获得了很多表现。
如果您有其他命令或其他选项来提高性能,请不要犹豫,提出建设性的批评。(我不是专业的!我努力学习)
/ 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