首页 > 解决方案 > 在其中运行多个命令时,Popen 在输出中给出一些奇怪的字符

问题描述

我编写代码通过使用 pcap 文件中的唯一标识字段来获取分段数据包。所以我在我的 C++ 程序中运行脚本命令。

第一个 tshark 命令将从具有过滤器中提到的 callID 的数据包中获取所有标识字段,第二个命令将获取该 pcap 中的所有分段数据包标识字段。然后 awk 命令进行比较,并找到两个 tshark 命令输出中存在的唯一标识字段。

命令会像---

cmd = (awk 'FNR==NR{a[$0]=1;next}($0 in a)' <((/usr/sbin/tshark -r /data/traces/TRACES.pcap 'sip.Call-ID =="1-4740@10.133.0.1" 或 sip.Call-ID=="57b116c-5b20924e-93dcd"' -T fields -e ip.id) 2>/dev/null) <((/usr/sbin /tshark -r /data/traces/TRACES.pcap 'ip.flags.mf==1' -T fields -e ip.id) 2>/dev/null)) 2>/dev/null

通过读取数据

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

    fflush(stream);

注意:: 我尝试使用 fflush 并且没有 fflush 仍然给我一个奇怪的角色。

while(fgets(buffer, 40, stream) != NULL)
{    
   data = buffer;
   result += data + '\n';
}

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

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

输出会像 --> 0^_iÏO^?

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

标签: c++shellawkpopenfgets

解决方案


推荐阅读