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

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

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

Например, можно создать канал и настроить gzip на сжатие того, что туда попадает:

mkfifo pipe

gzip -9 -c < pipe > out &

Что такое файлы именованных каналов?

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

Для создания файлов именованных каналов можно использовать утилиту mkfifo:

mkfifo /tmp/my.fifo

Что такое файлы устройств?

Тип файлов в UNIX-подобной ОС, содержат данные, необходимые операционной системе для взаимодействия с физическими устройствами, такими как диски и дисководы, принтеры и факсы и т. п.

Каждый из таких файлов идентифицируется с помощью двух идентификаторов: основного идентификатора (major number) и вспомогательного идентификатора (minor number).

Файлы устройств размещаются в каталоге /dev или в его подкаталогах. Примеры основных файлов:

/dev/sd[буква] — жёсткий диск

/dev/sd[буква][номер] — раздел диска

/dev/eth[номер] — сетевые интерфейсы Ethernet

Узнать информацию о файле устройства можно с помощью команд file и ls.

Создание файла именованного канала

Для создания файла именованного канала достаточно использовать утилиту mknod с параметром p.

mknod -m 777 /home/name/fifo p

Чтобы проверить создание файла именнованного канала:

ls -al | grep fifo

Для прекращения работы с файлом именованного канала достаточно использовать команду rm:

rm /home/name/fifo

Передаем данные через именованный канал

Для передачи данных через именованный канал, в первую очередь, создаем этот канал с помощью команды mkfifo:

mkfifo /tmp/my.fifo

Для проверки, что канал создан, воспользуйтесь:

ls -al /tmp

Для обмена данными между приложениями следует открыть дополнительное окно эмулятора терминала и выполнить в нем команду:

tail -f /tmp/my.fifo

Далее с помощью первого окна терминала выполнить:

echo "Linux" >> /tmp/my.fifo

Во втором окне, вы должны увидеть:

Linux

Прервать работу Ctrl+C. А после окончания использования файла программного канала следует удалить его:

unlink /tmp/my.fifo

Life-Hack [Жизнь-Взлом]/Хакинг

Правила сообщества

Просьба уважать друг друга.