2009-08-31 4 views
7

Я хотел бы создать именованный канал, как тот, который был создан «mkfifo», но одно предостережение. Я хочу, чтобы труба была двунаправленной. То есть, я хочу, чтобы процесс А писал в fifo и обрабатывал B, чтобы читать от него, и наоборот. Труба, созданная «mkfifo», позволяет процессу A читать данные, записанные в трубу. Обычно я использую две трубы, но я пытаюсь имитировать фактическое устройство, поэтому я хотел бы, чтобы семантика open(), read(), write() и т. Д. Была максимально похожа на фактическое устройство. Кто-нибудь знает технику, чтобы выполнить это, не прибегая к двум трубам или названным сокетам?Именованная труба похожа на создание «mkfifo», но двунаправленная

ответ

5

Используйте сокет Unix-домена.

О, вы сказали, что не хотите использовать единственное доступное решение - сокет Unix-домена.

В этом случае вы застряли с открытием двух именованных труб или без него. Или, конечно, напишите свой собственный драйвер устройства, вы можете сделать это для систем с открытым исходным кодом; это может быть сложнее для закрытых исходных систем (Windows, AIX, HP-UX).

4

Или pty («псевдотерминальный интерфейс»). man pty.

+3

Pty поставляется с кучей вещей, которые вы не хотите - обычно. Как и вся обработка терминальной дисциплины. Но думать об этом не стоит. –