Здравствуйте.
Такая ситуация: есть родительский процесс (Р), который порождает дочерний (C), и потом еще неопределенное количество процессов (C0 - CN)
Нужно как-то синхронизировать данные между C и C0-CN, а точнее, сделать так, чтобы сообщение принимаемое от C0 пересылалось всем C1-CN, и так для каждого CN.
Я решил использовать трубы, но уже сомневаюсь в верности своего решения...
Как я предполагаю, работать это должно так:
1) Родительский процесс создает 2 пайпа, один для сообщений(mp), второй для fd пайпов дочерних процессов(fdp), передает оба дескриптора в C и любой из порожденных CN
2) C0-СN порождаются, создают каждый по новому пайпу pN, отправляют дескриптор pN по fdp, плюс уникальный id
3) С принимает дескрипторы пайпов, сохраняет себе, ассоциирует с id
4) СN отправляет сообщение по mp, C его принимает и отправляет всем СX, с отличным от CN id
Собственно вопрос: я творю какую-то ересь, или мне кажется?
Если не кажется, как сделать проще?
Если кажется, как в C принимать данные из двух пайпов асинхронно - насколько я понял, после вызова read процесс блокируется до записи в пайп с другой стороны.