os.mkfifo(), mknod(), major(), minor() și makedev() în Python

Fișiere și directoare (os) Python 3.0+ (Unix)

Creează canale cu nume (FIFO) și fișiere speciale de dispozitiv.

Sintaxă
os.mkfifo(cale, mode=0o666)
os.mknod(cale, mode=0o600, device=0)
os.major(dev), os.minor(dev), os.makedev(major, minor)

Ce face os.mkfifo(), mknod(), major(), minor() și makedev()

mkfifo() creează un canal cu nume: un fișier special prin care un proces scrie și altul citește, ca printr-o țeavă. mknod() creează fișiere speciale (FIFO, dispozitive bloc sau caracter); dispozitivele cer drepturi de administrator.

Un număr de dispozitiv combină numărul „major” (tipul driverului) și „minor” (instanța). major() și minor() îl descompun, iar makedev() îl compune.

Parametri

Parametru Descriere
cale Fișierul special creat.
mode Tipul și permisiunile (de exemplu stat.S_IFIFO | 0o600).
device Pentru dispozitive: numărul creat cu makedev.

Ce returnează

mkfifo/mknod: None. major/minor/makedev: întregi.

Exemple

Exemplul 1: Comunicare printr-un FIFO

import os, stat
os.mkfifo("canal")
os.mknod("canal2", stat.S_IFIFO | 0o600)
print(stat.S_ISFIFO(os.stat("canal").st_mode), stat.S_ISFIFO(os.stat("canal2").st_mode))
pid = os.fork()
if pid == 0:
    with open("canal", "w") as f:
        f.write("mesaj de la copil")
    os._exit(0)
with open("canal") as f:
    print(f.read())
os.waitpid(pid, 0)
d = os.makedev(8, 1)
print(os.major(d), os.minor(d))

Rezultat

True True
mesaj de la copil
8 1

Greșeli frecvente

  • Deschizi un FIFO pentru citire fără ca altcineva să-l deschidă pentru scriere: programul se blochează așteptând.

Comenzi înrudite