Именованные каналы повторяют поведение неименованных каналов, но предназначены для обмена информацией между неродственными процессами.
Любые две запущенные программы Могут организовать однонаправленный канал передачи путем открытия файла канала по заранее согласованному имени на запись «с одной стороны» и на чтение «с другой».
Файл канала должен быть предварительно создан в дереве каталогов при помощи специального системного вызова mkfifo, а его последующее открытие осуществляется «обычным» системным вызовом open. Именованные каналы на текущий момент времени используются достаточно редко и практически вытеснены именованными локальными сокетами, но в некоторых случаях являются вполне достаточным средством взаимодействия.
В примере из листинга ниже показан терминальный мультиплексор W: [GNU screen], который в Ubuntu Linux все еще использует именованные каналы для однонаправленного взаимодействия между своими отключенным (detached) и повторно подключающимся (reattach, -r) экземплярами.
Именованные каналы
[email protected]:~$ tty
/dev/pts/0
fitz®ubuntu:~$ screen
pts/2
[email protected]:~$ tty
/dev/pts/2
[email protected]:~$ … CTRL+A C …
pts/4
[email protected]:~$ tty
/dev/pts/4
[email protected]:~$ … CTRL+A D …
[detached from 22261. pts -14. ubuntu]
[email protected]:~$ tty
/dev/pts/0
[email protected]:~$ ps fp 22261 t pts/2,pts/4
PID TTY STAT TIME COMMAND
22261 ? Ss 0:00 SCREEN
22262 pts/2 Ss+ 0:00 \_ /bin/bash
28020 pts/4 Ss+ 0:00 \_ /bin/bash
[email protected]:~$ screen -Is
There is a screen on:
22261.pts-14.ubuntu (27.02.2016 23:25:17) (Attached)
1 Socket in /var/run/screen/S-fitz.
итого 0
prwx—— 1 fitz fitz 0 февр. 27 23:25 22261.pts-14.ubuntu
[email protected]:~$ screen -r
fitz®ubuntu:~$ tty
/dev/pts/4
[email protected]:~$ ^D
pts/4
[email protected]:~$ tty
/dev/pts/2
[email protected]:~$ ^D
[screen is terminating]
Терминальные мультиплексоры screen и tmux позволяют запускать несколько пользовательских «вторичных» сеансов одновременно, пер включаться между ними, отсоединяться от них и снова присоединяться к ним из «первичного» сеанса.
При этом «первичный» сеанс может быть организован как угодно, его можно завершать и начинать другим способом.
Например, запустив терминальный мультиплексор на алфавитно-цифровом виртуальном терминале и отключившись от него, можно подключиться к нему и продолжить работу уже из графического эмулятора терминала или по сети с использованием службы удаленного доступа SSH.