LINUX.ORG.RU

Процесс, ожидающий ввода...


0

0

Посоветуйте, пожалуйста, решение проблемы:

Есть процесс-родитель и процесс-потомок. Стандартные потоки (stdin, stdout, stderr) потомка завернуты в pipe'ы, на другом конце которых сидит родитель.

С потоками вывода всё понятно - делаем poll(), если информация появилась, ее обрабатываем. Проблема с потоком ввода: надо совать туда информацию именно тогда, когда процесс-потомок ожидает ввода. Как это определить из родителя?

Сразу всю информацию в потомка совать нельзя, надо действовать именно так, как описано выше.


А что поздразумевается под "ожидает ввода"?

Если надо отправлять данные только когда потомок заблокирован в read(),
то я думаю можно использовать какой-нибудь семафор, который потомок будет взводить перед входом в read() и снимать после выхода. Если проблема в том, что нельзя допускать блокирования родителя в вызове write(), то на этот дескриптор можно сделать неблокируемым, либо проверять его через poll или select.

Vinick ★★
()
Ответ на: комментарий от Vinick

Надо именно отправлять данные при блокировке потомка в read().

Основная проблема в том, что потомком может быть стандартная программа, куда "не влезешь". То есть нужен некий способ узнать из родителя, что потомок блокирован.

OrlovIO
() автор топика
Ответ на: комментарий от OrlovIO

> Основная проблема в том, что потомком может быть стандартная
> программа, куда "не влезешь". То есть нужен некий способ узнать из
> родителя, что потомок блокирован

Зачем ? Делаешь тот же poll() или select() на предмет того,
что handler в состоянии writable. Если да - то пишешь.

anonymous
()
Ответ на: комментарий от anonymous

да этот полл будет говорить, что можно писать, пока буферу будут не полны, а потом врите будет вылетать с ошибкой нет места в буфере.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.