'cut' перенаправление вывода в программу c ++ - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь изменить вывод команды ping, используя cut, чтобы получить некоторую необходимую для меня информацию, а затем перенаправить ее на программу c ++ с bash pipe.

ping google.com | cut -d " " --fields 8 | ./a.out

Программа C ++ Делая такие вещи:

int main(){
    string str;
    cin >> str;
    cout << "str:" << str << endl;
}

Я предположил, что такая команда может работать, но это не так, после выполнения команды выше ничего не выводится. Но это прекрасно работает без использования cut. Если я использую только

ping google.com | ./a.out

, моя программа выводит. Поэтому я думаю, что проблема в том, что моя программа на С ++ не может читать строки из cut.

Как это можно исправить?

1 Ответ

1 голос
/ 17 апреля 2020

Да. Утилита ping буферизуется строкой (она выводит fflush(stdout) после вывода каждой строки).

Вместо этого вы можете настроить весь конвейер на использование буферизации строки, используя stdbuf команда из GNU coreutils:

stdbuf -oL -eL bash -c 'ping google.com | cut -d " " --fields 8 | ./a.out'
...