Именованная труба
В вычислительной технике ( именованный канал также известный как FIFO из-за своего поведения) является расширением традиционной концепции канала в Unix и Unix-подобных системах и является одним из методов межпроцессного взаимодействия (IPC). Эта концепция также встречается в OS/2 и Microsoft Windows , хотя семантика существенно различается. Традиционная трубка « безымянна » и служит ровно столько, сколько длится процесс. Однако именованный канал может существовать до тех пор, пока работает система, за пределами срока службы процесса. Его можно удалить, если он больше не используется. Обычно именованный канал отображается в виде файла, и обычно к нему прикрепляются процессы для IPC.
В Unix
[ редактировать ]Вместо обычного безымянного конвейера оболочки именованный конвейер использует файловую систему . Он явно создается с использованием mkfifo()
[1] или mknod()
, [2] и два отдельных процесса могут получить доступ к каналу по имени — один процесс может открыть его как читатель, а другой — как писатель.
Например, можно создать канал и настроить gzip для сжатия передаваемых по нему данных:
mkfifo my_pipe
gzip -9 -c < my_pipe > out.gz &
В отдельной оболочке процесса можно было самостоятельно отправить данные на сжатие:
cat file > my_pipe
Именованный канал можно удалить так же, как и любой файл:
rm my_pipe
Именованный канал можно использовать для передачи информации из одного приложения в другое без использования промежуточного временного файла. Например, вы можете передать вывод gzip в именованный канал следующим образом (здесь out.gz взят из приведенного выше примера, но это может быть любой gz):
mkfifo -m 0666 /tmp/namedPipe
gzip -d < out.gz > /tmp/namedPipe
Затем загрузите несжатые данные в MySQL . таблицу [3] вот так:
LOAD DATA INFILE '/tmp/namedPipe' INTO TABLE tableName;
Без этого именованного канала пришлось бы записывать всю несжатую версию файла file.gz перед загрузкой его в MySQL. Запись временного файла отнимает много времени и приводит к увеличению количества операций ввода-вывода и уменьшению свободного места на жестком диске.
PostgreSQL , Утилита командной строки psql
, также поддерживает загрузку данных из именованных каналов. [4]
В Windows
[ редактировать ]Доступ к именованному каналу можно получить так же, как к файлу. Функции Win32 SDK CreateFile
, ReadFile
, WriteFile
и CloseHandle
открыть, прочитать, записать и закрыть канал соответственно. В отличие от Unix, здесь нет интерфейса командной строки , за исключением PowerShell .
Именованные каналы не могут быть созданы как файлы в обычной файловой системе, в отличие от Unix. Кроме того, в отличие от своих аналогов в Unix, именованные каналы являются непостоянными (удаляются после закрытия последней ссылки на них). Каждый канал помещается в корневой каталог файловой системы именованного канала (NPFS), смонтированный по специальному пути. \\.\pipe\
(то есть канал с именем « foo » будет иметь полный путь \\.\pipe\foo
). Анонимные каналы, используемые в конвейерной обработке, на самом деле являются именованными каналами со случайным именем.
Пользователи видят их очень редко, но есть и заметные исключения. VMware Workstation ПК аппаратной виртуализации Например, инструмент эмулируемые последовательные порты может предоставлять хост-системе WinDbg режима ядра в виде именованных каналов, а отладчик от Microsoft поддерживает именованные каналы в качестве транспорта для сеансов отладки (фактически, VMware и WinDbg могут быть вместе (поскольку WinDbg обычно требует последовательного соединения с целевым компьютером), что позволяет драйверов разработчикам выполнять разработку и тестирование на одном компьютере). Обе программы требуют от пользователя ввода имен в поле \\.\pipe\name
форма.
Именованные каналы Windows NT могут наследовать контекст безопасности.
Краткое описание именованных каналов в Microsoft Windows:
- Межмашинный и внутримашинный МПК
- Полудуплекс или полнодуплекс
- Байт-ориентированный или пакетно-ориентированный
- Надежный
- Связь, ориентированная на соединение
- Блокирующее или неблокирующее чтение и запись (по выбору)
- Стандартные дескрипторы ввода-вывода устройства (
ReadFile
,WriteFile
) - Пространство имен, используемое для создания дескрипторов
- Неэффективный трафик WAN (явный запрос на передачу данных, в отличие, например, от скользящего окна TCP/IP и т. д.)
- Peekable чтения (чтение без удаления из входного буфера канала)
В .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 1003.1-2017 . Открытая группа .
- ^ «mknod, mknodat — создать каталог, специальный файл или обычный файл» . Стандарт IEEE 1003.1-2017 . Открытая группа.
- ^ «13.2.7 Заявление о ЗАГРУЗКЕ ДАННЫХ» . Справочное руководство MySQL 8.0 . MySQL . Архивировано из оригинала 14 июня 2020 г. Проверено 19 мая 2020 г.
- ^ Эйдан Ван Дайк (27 марта 2008 г.). «Re: psql и именованные каналы» . pgsql-хакеры . ПостгреСБЛ . Архивировано из оригинала 20 мая 2022 г. Проверено 19 мая 2020 г.
- ^ «Пространство имен System.IO.Pipes» . Сеть разработчиков Microsoft .
- ^ «Как подключиться к SQL Server, используя более раннюю версию SQL Server» . Майкрософт . 2019-11-19. Архивировано из оригинала 20 июля 2020 г. Проверено 19 мая 2020 г.