2008-10-10 4 views

ответ

20

Единственное отличие, о котором я знаю, это то, что именованные каналы под Linux - это фактические записи в файловой системе (вы увидите их в списке каталогов, у них есть особый тип), тогда как в Windows они хранятся в некоторых магических (все они доступны по пути «\\. \ pipe \»).

Во-вторых, в Linux вы можете просто писать или читать из труб, как если бы они были любым другим файлом, используя стандартные методы ввода-вывода. на окнах вам нужно использовать специальные функции «Pipe», которые являются частью Win32 API.

Мне нравится метод linux лучше, потому что он позволяет мне использовать трубы с любым приложением, которое я хочу. Например:

mkfifo pipe.wav 
decodeMP3 song.mp3 --out pipe.wav & 
encodeAVI video.mpeg pipe.wav --out video.avi 

Это позволяет мне выводить вывод декодера MP3 непосредственно в видеодекодер, вместо того чтобы сначала декодировать весь MP3 в WAV-файл на диске. Это удобно, если у вас двухъядерный процессор, потому что тогда вы запускаете обе операции сразу, для хорошего ускорения.

+1

Downvote. В Windows я могу использовать функции CreateFile, ReadFile, WriteFile, ReadFileEx, WriteFileEx для именованных каналов. Только сервер должен использовать CreateNamedPipe. Существуют функции труб для синхронизации создания и связывания труб, но они могут быть заменены использованием названных событий ожидания, если не нужны сетевые каналы. – 2013-01-25 10:06:49

+1

И локальные именные каналы Windows используют файлы с памятью, расположенные ниже. Это означает, что канал хранит данные в памяти или в файле pagefile.sys. – 2013-01-25 10:14:17

5

Под Linux (и * ix в общем), «все является файлом». Вы можете читать/писать/искать трубы и сокеты и устройства без каких-либо ограничений, поскольку эти операции имеют смысл.

В то время как Windows имеет гораздо менее унифицированную архитектуру для этих различных типов объектов. Хотя я не мог рассказать вам подробности, я знаю, что буферизация труб значительно отличается между Windows и Linux, поэтому вы можете столкнуться с трудностями.

Кроме того, одно общее использование труб Unix-y составляет fork() подпроцессом, а затем связывается с ним через канал (родительский открывает один конец, дочерний открывает другой конец). В Windows таких вещей просто невозможно. Механизмы МПК совершенно разные.

3

Смотрите также предыдущую тему:

What are named pipes?

который содержит мое взятие и несколько других людей

1

Другим важным отличием

Под окнами

A | B | C 

До тех пор, делается с его авансом T B не начинается чтение, То же самое для вывода B читается C

* Nix перехватывает ввод и вывод вместе с тем, что С может читать выход и B B может прочитать выход A, в то время А и В все еще работают

Пропускная способность примерно такая же, но производительность получается быстрее с помощью * nix.

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