Python Glossary English

все Python 3Linux · macOSosфункция

os.mkfifo

os — спецфайлы

Создаёт именованный канал (FIFO). Доступно на Unix.

Синтаксис

os.mkfifo(...)

Именованный канал виден как файл, но данных на диске не хранит: открытие на чтение блокируется, пока кто-нибудь не откроет его на запись, и наоборот. Поэтому в одном потоке нельзя открыть FIFO сначала на чтение, а потом на запись — первый же open() зависнет; на Linux выручает os.open() с флагом O_RDWR, но POSIX такое поведение не определяет. Права, как у mkdir, проходят через umask.

Примеры

import os, stat
os.mkfifo('demo.fifo')   # → ? только Unix: в файловой системе появился именованный канал demo.fifo
print(stat.S_ISFIFO(os.stat('demo.fifo').st_mode))   # → True — это FIFO, а не обычный файл
os.mkfifo('private.fifo', 0o600)   # → ? только Unix: канал, доступный на чтение и запись только владельцу
fd = os.open('demo.fifo', os.O_RDONLY | os.O_NONBLOCK)   # → ? только Unix: обычный open() на чтение ждал бы, пока другой процесс не откроет канал на запись
os.mkfifo('demo.fifo')   # → FileExistsError: [Errno 17] File exists: 'demo.fifo'

См. также

Частые ошибки

Открыть в полном глоссарииdocs.python.orgСообщить о неточности