Попен дает странный символ в выводе при запуске нескольких команд в нем - PullRequest
1 голос
/ 16 января 2020

Я пишу код для извлечения фрагментированного пакета, используя уникальное поле идентификации из файла pcap. Поэтому я запускаю команду сценариев в моей программе на C ++.

Первая команда tshark выберет все поля идентификации из пакета с callID, упомянутым в фильтре, а вторая - все поля идентификации фрагментированных пакетов в этом pcap. Затем команда awk сравнивает и находит уникальное поле идентификации, присутствующее в обоих выходных данных команды tshark.

Команда будет выглядеть как ---

cmd = (awk 'FNR == NR {a [$ 0] = 1; далее} ($ 0 в a)' <(( / usr / sbin / tshark -r /data/traces/TRACES.pcap 'sip.Call-ID == "1-4740@10.133.0.1" или sip.Call-ID == "57b116 c -5b20924e-93dcd"' -T поля -e ip.id) 2> / dev / null) <((/ usr / sbin / tshark -r /data/traces/TRACES.pcap 'ip.flags.mf == 1' -T поля -e ip. id) 2> / dev / null)) 2> / dev / null

Чтение данных с помощью

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

    fflush(stream);

ПРИМЕЧАНИЕ :: Я пытался с fflu sh и без fflu sh все еще дает мне странный характер.

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

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

ПРИМЕЧАНИЕ :: Пробовал и с командой system (), но это также возвращает мне странный символ

OUTPUT будет похож на -> 0 ^ _iÏO ^?

Я заметил странную вещь: когда я выполняю команду tshark индивидуально и сохраняю вывод в другом файле, а затем использую команду awk для этих файлов, тогда он выдаст правильный вывод. И команда правильно работает в терминале.

...