C++ 仅使用一个命令逐行从终端读取文件流

C++ Read file stream from terminal line by line with only one command

本文关键字:逐行 命令 终端 读取 文件 一个 C++      更新时间:2023-10-16

Short:我想将数据从终端读取到变量中并将其与字符串进行比较。

Long:我使用的是运行嵌入式Linux的GOEMBED TI AM3358开发板。我使用此套件从公共汽车上读取数据。为了将数据从总线读取到终端,我使用插座。

当我在终端中运行以下命令时,我从总线获得 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 12n")
{
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"的代码,并且代码总是将下一个 messafe 与字符串进行比较。如果这是可能的,我想我已经获得了很多表现。

如果您有其他命令或其他选项来提高性能,请毫不犹豫地给予建设性的批评。(我不是专业人士!我试着学习)

/编辑 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

提前感谢, 亲切问候 啰嗦��

如果有来自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 ...        
}
}
}