Scroll to navigation

FIFO(7) Руководство программиста Linux FIFO(7)

ИМЯ

fifo - специальный файл, организующий очередь (first-in first-out), именованный канал

ОПИСАНИЕ

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

Ядро поддерживает один объект канала для каждого специального файла FIFO, который открыт хотя бы одним процессом. Для того, чтобы пропускать данные, FIFO должен быть открыт как для чтения, так и для записи. Обычно, при открытии FIFO он блокируется до тех пор, пока вышеописанные условия не будут выполнены.

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

В Linux открытие FIFO для чтения и записи может быть осуществлено в блокирующем и неблокирующем режимах. Так как POSIX не описывает эти положения, это может быть использовано для открытия FIFO для чтения в отсутствие считывающих процессов. Процесс, использующий этот файл для чтения и записи (для связи с самим собой), не должен допустить возникновения блокировок (deadlocks).

ЗАМЕЧАНИЯ

Если процесс попытается записать данные в FIFO, который не открыт для чтения, то ему посылается сигнал SIGPIPE.

Специальные файлы FIFO могут быть созданы с помощью mkfifo(3); при выводе ls -l они отображаются с типом файла «p».

СМОТРИТЕ ТАКЖЕ

mkfifo(1), open(2), pipe(2), sigaction(2), signal(2), socketpair(2), mkfifo(3), pipe(7)

2008-12-03 Linux