fifo -
специальный
файл,
организующий
очередь (first-in first-out),
именованный
канал
Специальный
файл FIFO
(именованный
канал)
подобен
каналу, за
исключением
того, что
доступен
как часть
файловой
системы.
Его можно
открывать
из
нескольких
процессов
на чтении
или запись.
Когда
процессы
обмениваются
данными
через FIFO,
ядро
передаёт
все данные
без их
записи в
файловую
систему. То
есть,
специальный
файл FIFO не
хранит
содержимое
в файловой
системе;
запись в
файловой
системе
служит
просто
местом,
посредством
которого
процессы
могут
получить
доступ к
каналу,
используя
имя в
файловой
системе.
Ядро
поддерживает
один
объект
канала для
каждого
специального
файла FIFO,
который
открыт
хотя бы
одним
процессом.
Для того,
чтобы
пропускать
данные, FIFO
должен
быть
открыт как
для чтения,
так и для
записи.
Обычно, при
открытии FIFO
он
блокируется
до тех пор,
пока
вышеописанные
условия не
будут
выполнены.
Процесс
может
открыть FIFO в
неблокирующем
режиме. В
этом
случае
открытие
только для
чтения
выполняется
без ошибки,
даже если
другая
сторона
ещё не
открыла
его для
записи, и
открытие
только на
запись
завершается
ошибкой
ENXIO
(нет такого
устройства
или адреса),
если
другая
сторона к
этому
моменту не
была
открыта на
чтение.
В Linux открытие
FIFO для чтения
и записи
может быть
осуществлено
в
блокирующем
и
неблокирующем
режимах.
Так как POSIX не
описывает
эти
положения,
это может
быть
использовано
для
открытия FIFO
для чтения
в
отсутствие
считывающих
процессов.
Процесс,
использующий
этот файл
для чтения
и записи
(для связи с
самим
собой), не
должен
допустить
возникновения
блокировок
(deadlocks).
Подробную
информацию
о
семантике
ввода-вывода
FIFO смотрите в
pipe(7).
Если
процесс
попытается
записать
данные в FIFO,
который не
открыт для
чтения, то
ему
посылается
сигнал
SIGPIPE.
FIFO special files can be created by
mkfifo(3), and are indicated by
ls -l with the file type 'p'.
mkfifo(1),
open(2),
pipe(2),
sigaction(2),
signal(2),
socketpair(2),
mkfifo(3),
pipe(7)
Русский
перевод
этой
страницы
руководства
был сделан
Azamat Hackimov <
[email protected]>, Dmitry Bolkhovskikh
<
[email protected]>, Yuri Kozlov <
[email protected]> и
Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]