Подтвердить что ты не робот

Пример использования именованных каналов в Linux Bash

Может ли кто-нибудь опубликовать простой пример использования именованных каналов в Bash в Linux?

4b9b3361

Ответ 1

Один из лучших примеров практического использования именованной трубы...

С http://en.wikipedia.org/wiki/Netcat:

Другое полезное поведение - использование netcat в качестве прокси. Оба порта и хосты могут быть перенаправлены. Посмотрите на этот пример:

nc -l 12345 | nc www.google.com 80

Порт 12345 представляет запрос.

Это запускает сервер nc на порту 12345, и все соединения перенаправляются на google.com:80. Если веб-браузер отправляет запрос в nc, запрос будет отправлен в Google, но ответ не будет отправлен в веб-браузер. Это потому, что трубы являются однонаправленными. Это можно обойти с помощью именованного канала для перенаправления ввода и вывода.

mkfifo backpipe
nc -l 12345  0<backpipe | nc www.google.com 80 1>backpipe

Ответ 2

Откройте две разные оболочки и оставьте их рядом. В обоих случаях перейдите в каталог /tmp/:

cd /tmp/

В первом типе:

mkfifo myPipe
echo "IPC_example_between_two_shells">myPipe

Во втором наберите:

while read line; do echo "What has been passed through the pipe is ${line}"; done<myPipe

Первая оболочка не даст вам никакого приглашения, пока вы не выполните вторую часть кода во второй оболочке. Это потому, что чтение и запись fifo блокирует.

Вы также можете взглянуть на тип FIFO, выполнив ls -al myPipe и посмотреть детали этого конкретного типа файла.

Следующим шагом будет внедрение кода в скрипт!

Ответ 3

Вот команды:

$ mkfifo named_pipe

$ echo "Hi" > named_pipe &

$ cat named_pipe

Первая команда создает канал.

Вторая команда записывает в канал (блокирование). & помещает это в фоновый режим, поэтому вы можете продолжать вводить команды в одной и той же оболочке. Он выйдет, когда FIFO будет опустошен следующей командой.

Последняя команда читается из канала.

Ответ 4

Терминал 1:

$ mknod new_named_pipe p
$ echo 123 > new_named_pipe
  • Терминал 1 создал именованный канал.
  • Он записал в него данные, используя echo.
  • Он блокируется, так как нет принимающей стороны (так как каналы с именами и без имен нуждаются в получении, и запись в него заканчивается)

Терминал 2:

$ cat new_named_pipe
$ 123
$ 
  • Из терминала 2 добавляется принимающая сторона для данных.
  • Он прочитал данные в нем, используя cat.
  • Так как для new_named_pipe имеются как принимающие, так и записывающие концы, отображается информация и остановки блокировки

Именованные каналы используются повсеместно в Linux, большинство файлов char и block, которые мы видим во время команды ls -l являются ls -l char и block (все они находятся в /dev). Эти каналы могут быть блокирующими и неблокирующими, и основное преимущество заключается в том, что они обеспечивают самый простой способ для IPC.