Можно ли соединить две трубы/розетки?

Меня интересует, можно ли соединить две трубы или розетку. Предположим, что у вас есть две пары каналов/сокетов. Первый имеет два файловых дескриптора A и B, второй — два файловых дескриптора C и D. Можно ли соединить B с C, чтобы иметь возможность писать в A и читать данные из D? Кроме того, просто чтение формы B и запись в C в пользовательском пространстве?

Спасибо.


person Michal Pietras    schedule 10.02.2013    source источник


Ответы (1)


Если вы просто хотите читать из одного сокета и записывать в другой, не копируя данные в пользовательское пространство, посмотрите http://linux.die.net/man/2/sendfile. Вам нужен довольно свежий Linux.

person John Zwinck    schedule 10.02.2013
comment
На самом деле я использую FreeBSD, но это реализовано. Я буду читать об этом. Спасибо. - person Michal Pietras; 10.02.2013
comment
Да, он позволяет отправлять данные из одного файлового дескриптора в другой, не копируя их в пользовательское пространство. Однако он не соединяет две трубы/розетки на постоянной основе. Поэтому я думаю, что отправлю дескриптор файла B другому процессу вместо передачи данных через канал C-D. Большое спасибо. - person Michal Pietras; 10.02.2013
comment
Затем нужно соединить linux.die.net/man/2/splice. а не отправить файл. Однако я не знаю, существует ли он во FreeBSD. - person Scout; 23.05.2013