Происходит следующее:
есть два процесса p1 и p2:
1) в цыкле (выводит на консоль текст и уходит в sleep(2))
2) в цыкде (делаем некие действия (к примеру выводим на консоль символ) и ждем ввод с консоли функцией fgets(...))
делаем коныеер:
./p1 | ./p2
в итоге висим ( судя по всему в функции fgets)...
Объясните пжлста почему и как с этим бороться. Спасибо.
P.S.
забыл сказать что если sleep убираем , то все ОК .
fflush(stdout) после вывода пробовали делать?
>fflush(stdout) после вывода пробовали делать?
С чем это связано ? Ведь без конвеера все и так работает....
Можно ли как-то это лечить другими способами,
не трогая основное приложение ?
>>fflush(stdout) после вывода пробовали делать?
>С чем это связано ? Ведь без конвеера все и так работает....С буферизацией. p1 ничего не отдаёт в stdout, пока или
1. Не накопится 4K
2. Не пройдёт fflush (который проходит по время exit).>Можно ли как-то это лечить другими способами,
>не трогая основное приложение ?"Основное приложение" это P1? Никак не лечится - оно написано неправильно. Либо позаменяй все printf на write, либо сделай setvbuf(stdout, (char *)NULL, _IONBF, 0), либо делай fflush после каждого printf.