На некоторых платформах имеется возможность создавать каналы, существующие в виде настоящих файлов в файловой системе. Такие файлы называются именованными каналами (named pipes), или «fifo», так как они ведут себя в точности как каналы, которые создавались в программах из предыдущего раздела. Однако, вследствие того, что именованные каналы связаны с настоящими файлами, располагающимися на компьютере и являющимися внешними для любой программы, они никак не связаны с памятью, совместно используемой заданиями, и могут использоваться, как механизм взаимодействий между потоками, процессами и программами, запускаемыми независимо друг от друга.
После создания файла именованного канала процессы открывают его по имени и осуществляют чтение и запись в него с использованием обычных файловых операций. Fifo являются однонаправленными потоками. В типичной ситуации серверная программа читает данные из fifo, а одна или более клиентских программ записывают в него данные. Кроме того, для реализации двусторонней связи можно использовать группу из двух fifo, точно так же, как это делалось в предыдущем разделе с использованием анонимных каналов.
Так как именованные каналы являются файлами, они живут дольше, чем анонимные каналы внутри процессов, и к ним могут обращаться программы, запускаемые независимо. Приводившиеся выше примеры использования неименованных каналов основывались на том факте, что дескрипторы файлов (в том числе каналов) копируются в память дочерних процессов. Это осложняет использование анонимных каналов для организации взаимодействий программ, запускаемых независимо. С помощью же fifo доступ к каналам производится по имени файла, которое видят все программы независимо от наличия отношений родитель-потомок между процессами. Фактически, подобно обычным файлам, fifo обычно живут дольше программ, использующих их. Однако, в отличие от обычных файлов, операционная система синхронизирует доступ к fifo, что делает их идеальным механизмом IPC.
Благодаря этим отличиям именованные каналы лучше подходят в качестве универсального механизма IPC для независимых программ, взаимодействующих по схеме клиент/сервер. Например, постоянно выполняющаяся программа сервера может создавать каналы fifo и ждать из них запросы, поступающие от произвольных клиентов, а не только от тех, что могли бы быть порождены сервером. В некотором смысле, именованные каналы составляют альтернативу сокетам, с которыми мы встретимся в следующем разделе. Однако, в отличие от сокетов, при использовании каналов fifo нет прямой возможности устанавливать сетевые соединения с удаленными компьютерами, они не поддерживаются в версии Python для Windows на сегодняшний день, и для доступа к ним используется стандартный интерфейс для работы с файлами вместо более уникальных номеров портов и функций, которые мы будем изучать далее.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, I том, 2011