ИМЯ
fifo − специальный файл типа очередь (first-in first-out), именованный канал
ОПИСАНИЕ
Специальный файл FIFO (именованный канал) похож на канал (pipe), за тем исключением, что он доступен как часть файловой системы. Он может быть открыт несколькими процессами для чтения или записи. Когда процессы обмениваются данными через FIFO, ядро передает данные непосредственно, без промежуточного сохранения их в файле на диске. Таким образом, специальный файл FIFO не ссылается на какие-либо данные в файловой системе, а является просто ссылкой, чтобы процессы могли иметь доступ к каналу, пользуясь именем файла.
Ядро создает в точности один объект "канал" для каждого специального файла FIFO, который открыт по меньшей мере одним процессом. FIFO должен быть открыт с обоих концов (для чтения и для записи), прежде чем начать передачу данных. Обычно открытие FIFO блокируется до тех пор, когда другой конец также не будет открыт (***).
Процесс может открыть FIFO в неблокирующем режиме. В этом случае открытие только для чтения будет успешным даже если никто еще не открыл файл для записи с другого конца; открытие для записи завершится с ошибкой ENXIO (нет такого устройства или адреса), если другой конец еще не открыт.
Под Linux открытие FIFO для чтения и записи завершится успешно как в блокирующем, так и в неблокирующем режимах. POSIX не регулирует поведение в данном случае. Это может быть использовано, чтобы открыть FIFO для записи, пока еще некому его прочитать. Процесс, который использует оба конца связи, чтобы общаться с самим собой, должен быть очень осторожен, чтобы избежать мертвой блокировки.
ПРИМЕЧАНИЕ
Когда процесс пытается писать в FIFO, который не открыт для чтения с другой стороны, процессу посылается сигнал SIGPIPE.
Специальные файлы FIFO могут быть созданы командой mkfifo(3), и особенным образом отображаются в выводе команды ls -l.
СМОТРИ ТАКЖЕ
mkfifo(3), mkfifo(1), pipe(2), socketpair(2), open(2), signal(2), sigaction(2)