2009-08-05 3 views
1

Возможно ли, чтобы дескрипторы файла N были видны программе как 1 дескриптор файла, так что данные, полученные в любом из дескрипторов файлов N (т. Е. Из N сокетов), будут перенаправлены обратно в вызывающий API в дескрипторе одиночного файла, скрывая тот факт, что он действительно может исходить из другого файлового дескриптора? Можно ли также аналогично абстрагироваться от записи (но вернемся к правильному дескриптору файла N)?N: 1 дескрипторы файлов?

+0

Что вы подразумеваете под дескриптором «правильный Nth»? «Аналогично абстрагируется» означает, что записи будут обращаться ко всем дескрипторам, а не к «правильному» дескриптору. В противном случае вы пытаетесь создать пару muxer/demuxer, но для этого потребуется встроить N в куски чтения/записи. –

+0

Напоминает мне о трубах ... – mpen

ответ

3

Поскольку вы отмечаете и используете слово socket, я полагаю, что ваши данные поступают по сетевому пути, и вы действительно хотите читать несколько источников по одному и тому же сокету.

Если вы работаете со сокетами TCP/IP, у вас уже есть эта схема с UDP сокеты, прослушивающие локальный порт, к которому могут быть отправлены несколько источников.

Вы не можете иметь такую ​​TCP розетки, однако select API доступен на все стандартные реализации, чтобы позволить вам открыть несколько сокетов TCP прослушивания, один на источник, а затем сделать выбор на всей партии. Вы не сможете «спрятать» источник здесь.

Если абстракция является то, что вы после этого, лучше идеей было бы написать небольшое приложение, которое будет управлять этим несколько коммуникационных конечных точек и поговорить с вашим основным приложением через IPC. Вы можете реализовать короткий заголовок, чтобы адресовать конечные точки этому маленькому приложению. Затем ваше основное приложение увидит все на одной точке связи.

Он также решит вашу проблему абстрагирования записей прекрасно.

Смежные вопросы