C++ 在输出中运行多个命令时,Popen在输出中给出了一些奇怪的字符

C++ 在输出中运行多个命令时,Popen在输出中给出了一些奇怪的字符,c++,shell,awk,popen,fgets,C++,Shell,Awk,Popen,Fgets,我编写代码,通过使用pcap文件中的唯一标识字段来获取碎片数据包。所以我在C++程序中运行脚本命令。p> 第一个tshark命令将从具有过滤器中提到的callID的数据包中获取所有标识字段,第二个命令将获取该pcap中的所有分段数据包标识字段。 然后与awk命令进行比较,找到tshark命令输出中存在的唯一标识字段 命令就像--- cmd=(awk'FNR==NR{a[$0]=1;next}($a中的0)'/dev/null)/dev/null))2>/dev/null 通过读取数据 F

我编写代码,通过使用pcap文件中的唯一标识字段来获取碎片数据包。所以我在C++程序中运行脚本命令。p> 第一个tshark命令将从具有过滤器中提到的callID的数据包中获取所有标识字段,第二个命令将获取该pcap中的所有分段数据包标识字段。 然后与awk命令进行比较,找到tshark命令输出中存在的唯一标识字段

命令就像---

cmd=(awk'FNR==NR{a[$0]=1;next}($a中的0)'/dev/null)/dev/null))2>/dev/null

通过读取数据

    FILE * stream = popen(cmd.c_str(), "r");
    if (!stream)
    {
        LOG_DEBUG("popen failed");
    }

    fflush(stream);
注:我试过使用fflush,但没有使用fflush,仍然让我感到奇怪 性格

注意::也尝试了system()命令,但这也返回了一个奇怪的字符

输出将类似-->0^\u iÏO^?

我注意到一件奇怪的事情,当我单独执行tshark命令并将输出保存在不同的文件中,然后对这些文件使用awk命令时,它将给出正确的输出。
并且命令也在终端中正确运行。

我认为您需要重新构造命令,以便它可以正常工作。您能建议任何有效的更改吗?对于这种情况?您认为刷新输入流会做什么?如果给定流是开放供写入的(或者如果它是开放供更新的,并且最后一个i/o操作是输出操作)输出缓冲区中的任何未写入数据都会写入该文件。我认为您需要重新构造命令,以便它可以正常工作。您能建议任何有效的更改吗?对于这种情况?您认为刷新输入流的作用是什么?如果给定的流是开放供写入的(或者如果它是开放供更新的,并且最后的i/o操作是输出操作),则其输出缓冲区中的任何未写入数据都会写入文件。
while(fgets(buffer, 40, stream) != NULL)
{    
   data = buffer;
   result += data + '\n';
}

if(data.empty()) {
   data = buffer;
   result = data + '\0';
}