адресная система канала

Возможно, я неправильно понимаю Как сделать канал в С++ таким образом http://linux.die.net/man/2/pipe, но как pipe знает, куда отправлять и откуда получать?

После обновления базы данных через страницу ajax я хочу, чтобы эта программа ajax отправляла сообщение моей программе websocket для обновления всех других соответствующих пользователей, и было рекомендовано использовать pipe, вероятно, лучше всего как 2 программы на С++ вызывают класс/функции друг друга в одном Linux-боксе ?.

Есть ли только один канал, и все программы читают его и проверяют сообщение?


Примечание. Я использую fastcgi++ и websocket++, если это помогает.


person Community    schedule 09.03.2013    source источник


Ответы (1)


Если вы хотите, чтобы несколько независимых процессов читали из канала, вам нужно использовать именованный канал, также известный как FIFO.

Используя функцию mkfifo, один процесс создает файл в файловой системе (обычно в /tmp) . Затем этот файл можно открыть для чтения или записи с помощью обычного системного вызова open любым другим процесс, который имеет доступ к этому файлу.

person Some programmer dude    schedule 09.03.2013
comment
Спасибо за ответ! Мне нужен только один источник и один пункт назначения для каждого канала, но я хочу, чтобы в целом было много каналов и для каждой программы было много каналов. Используют ли каналы файловую систему, такую ​​как FIFO, или используют память? - person ; 09.03.2013
comment
@JoeCoderGuy файл необходим для mkfifo только при создании fifo (чтобы процесс-получатель знал, что открывать), после этого он работает как обычный канал - данные проходят через fifo (или канал) не < /b> нужно пройти через диск. - person John Carter; 09.03.2013
comment
@JoeCoderGuy Если два процесса полностью независимы, то есть две разные программы, вы должны использовать mkfifo для создания именованного канала, поскольку системный вызов pipe создает только канал в памяти. Если вы, с другой стороны, fork новый процесс, так что два процесса связаны, выполнение вызова pipe перед fork допустимо, так как дескрипторы файлов наследуются при выполнении fork. - person Some programmer dude; 09.03.2013