Я тестирую этот пример программирования с использованием каналов, и мне кажется довольно просто.
Но мне было интересно, что произойдет, если первый аргумент первого вызова popen() (строка, содержащая команду оболочки) содержит цикл while do.
Например, если я выполняю эту команду оболочки в течение 3 секунд, я получаю следующий вывод:
tomas@ubuntu64:~$ while true; do ps -A; sleep 1; done | grep init
1 ? 00:00:03 init
1 ? 00:00:03 init
1 ? 00:00:03 init
поэтому grep работает на каждой итерации.
Однако, если я сделаю это через пример языка C, изменив popen() примера на:
FILE* ps_pipe = popen("while true; do ps -A; sleep 1; done", "r");
Я не получаю результата при выполнении скомпилированной программы C.
Кто-нибудь может пролить свет на это?