Вопрос

Чем отличаются каналы в Windows и Linux?

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

Что такое именованные каналы?

Который содержит мой дубль и несколько других людей

Еще одно важное отличие

Под окнами

A | B | C 

До тех пор, пока A не завершит работу с выходом B, он не начнет читать, то же самое для вывода B, читаемого C

* nix соединяет вход и выход вместе, так что C может читать выходные данные B, а B может читать выходные данные A, пока A и B все еще работают

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top