Именованная труба - Named pipe - Wikipedia
В вычисление, а именованный канал (также известный как ФИФО за его поведение) является продолжением традиционного трубка концепция на Unix и Unix-подобный систем, и является одним из методов межпроцессного взаимодействия (МПК). Эта концепция также встречается в OS / 2 и Майкрософт Виндоус, хотя семантика существенно различается. Традиционная трубка - это "безымянный "и длится только до тех пор, пока выполняется процесс. Однако именованный канал может работать до тех пор, пока работает система, сверх срока службы процесса. Его можно удалить, если он больше не используется. Обычно именованный канал отображается как файл , и обычно к нему присоединяются процессы для IPC.
В Unix
Вместо обычного безымянного конвейера оболочки именованный конвейер использует файловая система. Он явно создается с использованием mkfifo ()
[1] или же mknod ()
,[2] и два отдельных процессы может обращаться к каналу по имени - один процесс может открыть его как средство чтения, а другой как средство записи.
Например, можно создать трубу и настроить gzip для сжатия вещей, подключенных к нему:
mkfifo my_pipegzip -9 -c out.gz &
В отдельной оболочке процесса, независимо, можно было отправить данные для сжатия:
cat файл> my_pipe
Именованный канал можно удалить, как и любой файл:
rm my_pipe
Именованный канал можно использовать для передачи информации из одного приложения в другое без использования промежуточного временного файла. Например, вы можете передать вывод gzip в именованный канал следующим образом:
mkfifo -m 0666 / tmp / namedPipegzip -d / tmp / namedPipe
Затем загрузите несжатые данные в MySQL стол[3] вот так:
НАГРУЗКА ДАННЫЕ INFILE '/ tmp / namedPipe' В СТОЛ tableName;
Без этого именованного канала нужно было бы записать всю несжатую версию file.gz перед загрузкой в MySQL. Запись временного файла занимает много времени и требует большего Ввод / вывод и меньше свободного места на жестком диске.
PostgreSQL утилита командной строки, psql
, также поддерживает загрузку данных из именованных каналов.[4]
В Windows
Доступ к именованному каналу можно получить так же, как к файлу. Win32 Функции SDK CreateFile
, ReadFile
, WriteFile
и CloseHandle
открыть, прочитать, записать и закрыть канал соответственно. В отличие от Unix, здесь нет Интерфейс командной строки, кроме PowerShell.
Именованные каналы не могут быть созданы как файлы в обычной файловой системе, в отличие от Unix. Также, в отличие от своих аналогов в Unix, именованные каналы являются непостоянными (удаляются после закрытия последней ссылки на них). Каждый канал помещается в корневой каталог файловой системы именованного канала (NPFS), монтируется по специальному пути .трубка
(то есть канал с именем "фу "будет иметь полное имя пути . pipe foo
). Анонимные каналы, используемые в конвейерной обработке, на самом деле являются именованными каналами со случайным именем.
Их очень редко видят пользователи, но есть заметные исключения. В VMware Workstation ПК аппаратное обеспечение виртуализация инструмент, например, может отображать эмулируемые последовательные порты в хост-систему как именованные каналы, а WinDbg режим ядра отладчик из Microsoft поддерживает именованные каналы в качестве транспорта для сеансов отладки (фактически, VMware и WinDbg могут быть связаны вместе - поскольку WinDbg обычно требует последовательного подключения к целевому компьютеру, что позволяет Водитель Разработчики делаем их разработку и тестирование на одном компьютере). Обе программы требуют, чтобы пользователь вводил имена в .трубкаимя
форма.
Именованные каналы Windows NT могут наследовать контекст безопасности.
Сводка именованных каналов в Microsoft Windows:
- Межмашинный и внутримашинный МПК
- Полудуплекс или же полнодуплексный
- Байт-ориентированный или же пакетно-ориентированный
- Надежный
- Связь с установлением соединения
- Блокирующее или неблокирующее чтение и запись (по выбору)
- Стандартные дескрипторы ввода-вывода устройства (
ReadFile
,WriteFile
) - Пространство имен используется для создания ручек
- Неэффективный WAN-трафик (явный запрос на передачу данных, в отличие, например, от скользящего окна TCP / IP и т. Д.)
- Доступные чтения (чтение без удаления из входного буфера канала)
В .NET Framework 3.5 добавлена поддержка именованных каналов.[5]
Именованные каналы также могут использоваться в качестве конечной точки в Microsoft SQL Server.[6]
Именованные каналы также являются сетевым протоколом в Блок сообщений сервера (SMB) набор, основанный на использовании специального межпроцессного взаимодействия (IPC) поделиться. IPC SMB может беспрепятственно и прозрачно передавать контекст аутентификации пользователя по именованным каналам. Windows NT целиком NT домен набор сервисов протоколов реализован как DCE / RPC по именованным каналам, как и административные приложения Exchange 5.5.
Смотрите также
Рекомендации
- ^ "mkfifo, mkfifoat - создать специальный файл FIFO". IEEE Std 1003.1-2017. Открытая группа.
- ^ "mknod, mknodat - создать каталог, специальный файл или обычный файл". IEEE Std 1003.1-2017. Открытая группа.
- ^ «13.2.7 Заявление о загрузке данных». Справочное руководство по MySQL 8.0. MySQL.
- ^ Эйдан Ван Дайк (27 марта 2008 г.). "Re: psql и именованные каналы". pgsql-хакеры. PostgreSQL.
- ^ "Пространство имен System.IO.Pipes". Сеть разработчиков Microsoft.
- ^ «Как подключиться к SQL Server с помощью более ранней версии SQL Server». Microsoft. 2019-11-19. Получено 2020-05-19.