C ++从Linux终端读取文本并与字符串

时间:2018-03-28 15:22:13

标签: c++ embedded-linux socketcan

我写了一些使用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 * 以下是我将代码读入变量“result”的代码。 (如果你在我的代码中看到其他愚蠢的事情,请求请给予一些建设性的批评!我想从我的项目中学习。)

    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

0 个答案:

没有答案