Обзор
`mkfifo` создает именованный канал, который является специальным файлом в файловой системе. Этот канал служит каналом связи, позволяющим двум или более независимым процессам обмениваться данными. Когда один процесс записывает данные в канал, другой процесс может читать данные из канала, причем данные обрабатываются по принципу «первым пришел — первым ушел» (FIFO).
Основные характеристики
- Существует в файловой системе и доступен по пути
- Предоставляет канал связи между независимыми процессами
- Данные обрабатываются по принципу «первым пришел — первым ушел» (FIFO)
- Полезен для построения сложных конвейеров в скриптах оболочки
Основные опции
Команда `mkfifo` в основном используется с путем к файлу в качестве аргумента и поддерживает несколько основных опций.
Параметры создания
Сгенерированная команда:
Комбинируйте команды.
Описание:
`mkfifo` Запускает команду.
Комбинируйте эти опции, чтобы виртуально выполнять команды с помощью ИИ.
Примеры использования
Показывает, как создать именованный канал с помощью `mkfifo` и использовать его для связи между процессами.
Создание базового именованного канала
mkfifo my_pipe
Создает канал с именем `my_pipe` в текущем каталоге.
Создание канала с определенными правами доступа
mkfifo -m 600 my_private_pipe
Создает `my_private_pipe`, доступный только для чтения и записи владельцу.
Передача данных с использованием именованного канала
mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel
Пример записи данных в одном терминале и чтения их в другом. **Терминал 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **Терминал 2:** `cat < data_channel`
Использование канала с фоновым процессом
mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output
Передает вывод фонового процесса другому команде через канал.
Советы и примечания
Важные моменты и советы по использованию именованных каналов.
Удаление канала
Именованные каналы можно удалять с помощью команды `rm`, как и обычные файлы. Рекомендуется удалять ненужные каналы после использования.
- `rm my_pipe`
Блокирующее поведение
Именованные каналы по умолчанию работают в блокирующем режиме. Это означает, что попытка записи (или чтения) с одной стороны будет ожидать, пока другая сторона не начнет чтение (или запись). Чтобы избежать этого поведения, запускайте процесс в фоновом режиме, например, `cat < my_pipe &`, или открывайте канал в неблокирующем режиме с помощью флага `O_NONBLOCK`.
Использование временной файловой системы
Для временных каналов рекомендуется использовать каталог `/tmp` или команду `mktemp` для создания каналов с уникальными именами. Это предотвращает конфликты имен и гарантирует, что каналы будут автоматически очищены при перезагрузке системы.