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

Автор: | 04.12.2018

Именованные каналы повторяют поведение неименованных каналов, но предназначены для обмена информацией между неродственными процессами.

Любые две запущенные программы Могут организовать однонаправленный канал передачи путем открытия файла канала по заранее согласованному имени на запись «с одной стороны» и на чтение «с другой».

Файл канала должен быть предварительно создан в дереве каталогов при помощи специального системного вызова mkfifo, а его последующее открытие осуществляется «обычным» системным вызовом open. Именованные каналы на текущий момент времени используются достаточно редко и практически вытеснены именованными локальными сокетами, но в некоторых случаях являются вполне достаточным средством взаимодействия.

В примере из листинга ниже показан терминальный мультиплексор W: [GNU screen], который в Ubuntu Linux все еще использует именованные каналы для однонаправленного взаимодействия между своими отключенным (detached) и повторно подключающимся (reattach, -r) экземплярами.

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

fitz@ubuntu:~$ tty

/dev/pts/0
fitz®ubuntu:~$ screen

pts/2

fitz@ubuntu:~$ tty 

/dev/pts/2

fitz@ubuntu:~$                     …                  CTRL+A C                   …

pts/4

fitz@ubuntu:~$ tty 

/dev/pts/4

fitz@ubuntu:~$                     …                  CTRL+A D                    …

[detached from 22261. pts -14. ubuntu]

fltz@ubuntu:~$ tty

/dev/pts/0
fitz@ubuntu:~$ 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
fitz@ubuntu:~$ 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
fitz@ubuntu:~$ screen -r

fitz®ubuntu:~$ tty

/dev/pts/4

fitz@ubuntu:~$ ^D

pts/4

fitz@ubuntu:~$ tty

/dev/pts/2

fitz@ubuntu:~$ ^D

[screen is terminating]

Терминальные мультиплексоры screen и tmux позволяют запускать несколько пользовательских «вторичных» сеансов одновременно, пер включаться между ними, отсоединяться от них и снова присоединяться к ним из «первичного» сеанса.

При этом «первичный» сеанс может быть организован как угодно, его можно завершать и начинать другим способом.

Например, запустив терминальный мультиплексор на алфавитно-цифровом виртуальном терминале и отключившись от него, можно подключиться к нему и продолжить работу уже из графического эмулятора терминала или по сети с использованием службы удаленного доступа SSH.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *