c++ - 在其中运行多个命令时,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 命令时,它将给出正确的输出。并且命令也在终端中正确运行。
解决方案
推荐阅读
- docker - 强制 pod 的模式具有来自该 pod 内容器的标签
- java - 排序 listarray 算法
- python - 如何使用 python 打印一系列字符串均值±标准差
- html - 使用引导程序对齐文本和图像
- kubernetes - 为什么我的服务间流量显示在 Kiali 的 Passthrough 集群中
- python - 使用python中的通用ID将数据收集到一行
- python - 提供 Locust 错误节点名或服务名,或未知
- javascript - 在javascript中重复将一个类添加到一个dom元素,或者在添加之前检查它是否存在,是否会占用更多内存?
- r - R - 在条形图描述中自动设置新行
- amazon-web-services - 对多个 IAM 角色应用相同的 IAM 策略