简短:我想将终端中的数据读入变量并将其与字符串进行比较。
Long:我正在使用GOEMBED的TI AM3358开发板,它运行嵌入式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的大量数据。我认为这样做的原因是我总是需要重新初始化canbus(cmd - &gt; candump can0)。
现在我的问题是:如何更改我的代码,我只需要运行命令&#34; candump can0&#34;那些代码总是将下一个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
答案 0 :(得分:0)
如果来自candump
的连续输出你只需管道输出到您的程序就像这样:
$ candump can0 | myprogram
myprogram.cpp
看起来有点像这样:
#include <iostream>
#include <string>
int main()
{
std::string message;
while(std::getline(std::cin, message))
{
// process message here ... eg. ...
if(message == "can0 000 [2] 01 12")
{
// do something specific ...
}
}
}