Именованные каналы в 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 [Жизнь-Взлом]/Хакинг
268 постов2.7K подписчиков
Правила сообщества
Просьба уважать друг друга.