URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3900
[ Назад ]

Исходное сообщение
"Pipes & Forks Для Чайников"

Отправлено Василий Свиридов , 02-Фев-05 22:45 
Изучаею c/c++ программирование под Linux.
Такой вопрос.

Предок форкается 2 раза. Предок читает с клавиатуры посимвольно. Прочитанное передаётся через pipe1 в child1. child1 производит некоторую манипуляцию над прочитанным и передаёт через pipe2 в child2. child2 читает из pipe2 и выводит на экран.

По идее всё просто. Но такая проблема while(true) loop в child 2 сидит на инструкции read(pipe2[... и тормозит.
Если делать fnctl(pipe2[0],n_delay) то тогда вторая инструкция этого loop'а (а именно cout << прочитанное) начинает выводить его не единожды, а пока kill не сделаешь...

как это можно починить??

http://helium.exceede.com:8890/main.cc <- линк на source

спасибо


Содержание

Сообщения в этом обсуждении
"Pipes & Forks Для Чайников"
Отправлено Василий Свиридов , 02-Фев-05 22:47 
Пардон, не 8890, а 9980.

"Pipes & Forks Для Чайников"
Отправлено Xenu , 02-Фев-05 22:55 
> Но такая проблема while(true) loop в child 2
>сидит на инструкции read(pipe2[... и тормозит.
>Если делать fnctl(pipe2[0],n_delay) то тогда вторая инструкция этого loop'а (а именно cout
><< прочитанное) начинает выводить его не единожды, а пока kill не
>сделаешь...
>
>как это можно починить??

может быть
$ man select


"Pipes & Forks Для Чайников"
Отправлено chip , 03-Фев-05 14:04 
>как это можно починить??

1. man 2 select
2. man 2 fcntl /O_NONBLOCK


"Pipes & Forks Для Чайников"
Отправлено Василий Свиридов , 04-Фев-05 03:06 
Всем спасибо, всё заработало.