C++ 仅使用一个命令逐行从终端读取文件流
C++ Read file stream from terminal line by line with only one command
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 ...
}
}
}
相关文章:
- 如何在c++中从文本文件中逐行读取整数
- 打印逐行存储的文本文件
- 如何逐行读取文件,每行中的内容都用空格分隔并将其写入新文件中
- C++如何将字符串逐行转换为双精度
- 在 c++ 中逐行阅读字符串,不要以空格停止
- 使用 QT 逐行读取 JSON
- 逐行读取文件,并将数据插入变量和数组中
- 逐行从文本文件中读取 |C++
- 我遇到使用 c++ 逐行读取输入文件的问题
- 无法逐行读取.csv文件
- 在 c++ 中逐行读取文件(将代码从 Python 转换为 C++)
- 如何逐行从文件中获取单词,并在C++中用分号分隔?
- C ++ txt 文件成数组逐行字符串和 int 用于纸牌游戏
- 如何将文件逐行读取到矢量中,然后打印矢量
- 读取串行命令花费太多时间
- C++ 仅使用一个命令逐行从终端读取文件流
- 如何在windows中的gcc中逐行读取命令输出,就像使用标准输入一样
- 在 C++ 中逐行读取命令行的输出到字符串向量中
- C++捕获输入的命令行并逐行输出
- 在运行命令时,popen的时间间隔是多少,以及如何逐行捕获输出