Именованный канал

Материал из Seo Wiki - Поисковая Оптимизация и Программирование

Перейти к: навигация, поиск

В программировании именованный канал или именованный конвейер (англ. named pipe) — расширение понятия конвейера в Unix и подобных ОС, один из методов межпроцессного взаимодействия. Это понятие также существует и в Microsoft Windows, хотя там его семантика существенно отличается. Традиционный канал — «безымянен», потому что существует анонимно и только во время выполнения процесса. Именованный канал — существует в системе и после завершения процесса. Он должен быть «отсоединён» или удалён когда уже не используется. Процессы обычно подсоединяются к каналу для осуществления взаимодействия между процессами.

Содержание

Именованные каналы в Unix

Вместо традиционного, безымянного конвейера оболочки (англ. shell pipeline), именованный канал создаётся явно с помощью mknod или mkfifo, и два различных процесса могут обратиться к нему по имени.

Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:

mkfifo pipe
gzip -9 -c < pipe > out

Параллельно, в другом процессе можно выполнить:

cat file > pipe

что приведёт к сжатию передаваемых данных gzip-ом.

Именованные каналы в Windows

В Windows дизайн именованных каналов смещён к взаимодействию «клиент-сервер», и они работают во многом как сокеты: помимо обычных операций чтения и записи, именованные каналы в Windows поддерживают явный «пассивный» режим для серверных приложений (для сравнения: Unix domain socket). Windows 95 поддерживает клиенты именованных каналов, а системы ветви Windows NT могут служить также и серверами.

К именованному каналу можно обращаться в значительной степени как к файлу. Можно использовать функции Windows API CreateFile, CloseHandle, ReadFile, WriteFile, чтобы открывать и закрывать канал, выполнять чтение и запись. Функции стандартной библиотеки Си такие как fopen, fread, fwrite и fclose, тоже можно использовать, в отличие от сокетов Windows (англ.), которые не реализуют использование стандартных файловых операций в сети. Интерфейс командной строки (как в Unix) отсутствует.

Именованные каналы — не существуют постоянно и не могут, в отличие от Unix, быть созданы как специальные файлы в произвольной доступной для записи файловой системе, но имеют временные имена (освобождаемые после закрытия последней ссылки на них), которые выделяются в корне файловой системы именованных каналов (англ. named pipe filesystem, NPFS) и монтируются по специальному пути «\\.\pipe\» (т. е. у канала под названием «foo» полное имя будет «\\.\pipe\foo»). Анонимные каналы, использующиеся в конвейерах — это на самом деле именованные каналы со случайным именем.

Именованные каналы обычно не доступны непосредственно пользователю, но есть существенные исключения. Например, средство виртуализации рабочих станций VMWare может открывать эмулируемый последовательный порт для главной системы как именованный канал, а отладчик уровня ядра kd от Microsoft поддерживает именованные каналы в качестве средства сообщения при отладке (фактически, так как kd обычно требует подключения к целевому компьютеру по последовательному порту, VMware и kd можно соединить вместе для отладки драйверов устройств на одном компьютере). Обе программы требуют от пользователя указания имён канала в виде «\\.\pipe\имя».

Именованные каналы в Windows NT могут наследовать контекст безопасности.

Именованные каналы в сетях Windows

Именованные каналы — это также сетевой протокол в SMB, основанный на использовании особой части межпроцессного взаимодействия (IPC). IPC в SMB может бесшовно и прозрачно передавать контекст аутентификации пользователя на другую сторону именованного канала. Наследование аутентификации для именованных каналов Windows NT для пользователя и разработчика настолько прозрачно, что почти незаметно, в связи с чем его часто неправильно понимают.

См. также

Внешние ссылки

cs:Pojmenovaná roura

en:Named pipe es:Tubería nombrada fr:Tube nommé pt:Pipe nomeado uk:Іменований канал

Личные инструменты

Served in 0.124 secs.