Übersicht
`mkfifo` erstellt eine spezielle Datei im Dateisystem, eine benannte Pipe. Diese Pipe dient als Kommunikationskanal, über den zwei oder mehr unabhängige Prozesse Daten senden und empfangen können. Wenn ein Prozess in die Pipe schreibt, kann ein anderer Prozess aus der Pipe lesen, wobei die Daten nach dem FIFO-Prinzip (First-In, First-Out) verarbeitet werden.
Hauptmerkmale
- Existiert im Dateisystem und ist über einen Pfad zugänglich
- Bietet einen Kommunikationskanal zwischen unabhängigen Prozessen
- Daten werden nach dem FIFO-Prinzip verarbeitet
- Nützlich für die Erstellung komplexer Pipelines in Shell-Skripten
Wichtige Optionen
Der Befehl `mkfifo` wird hauptsächlich mit einem Dateipfad als Argument verwendet und unterstützt einige grundlegende Optionen.
Erstellungsoptionen
Erzeugter Befehl:
Kombinieren Sie die Befehle.
Beschreibung:
`mkfifo` Führen Sie den Befehl aus.
Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.
Anwendungsbeispiele
Zeigt, wie man mit `mkfifo` eine benannte Pipe erstellt und wie diese zur Prozesskommunikation verwendet wird.
Erstellung einer einfachen benannten Pipe
mkfifo my_pipe
Erstellt eine Pipe namens `my_pipe` im aktuellen Verzeichnis.
Erstellung einer Pipe mit spezifischen Berechtigungen
mkfifo -m 600 my_private_pipe
Erstellt `my_private_pipe`, auf die nur der Eigentümer lesen und schreiben kann.
Datenübertragung mit einer benannten Pipe
mkfifo data_channel
echo "Hello from Terminal 1!" > data_channel &
cat < data_channel
Beispiel für das Schreiben von Daten in einem Terminal und das Lesen in einem anderen. **Terminal 1:** `mkfifo data_channel` `echo "Hello from Terminal 1!" > data_channel` **Terminal 2:** `cat < data_channel`
Verwendung von Pipes mit Hintergrundprozessen
mkfifo background_output
(ls -l; sleep 2; echo "Done listing") > background_output &
cat < background_output
Leitet die Ausgabe eines im Hintergrund laufenden Prozesses über eine Pipe an einen anderen Befehl weiter.
Tipps & Hinweise
Wichtige Punkte und nützliche Tipps bei der Verwendung von benannten Pipes.
Löschen von Pipes
Benannte Pipes können wie normale Dateien mit dem Befehl `rm` gelöscht werden. Es ist ratsam, nicht mehr benötigte Pipes nach Gebrauch zu bereinigen.
- `rm my_pipe`
Blockierendes Verhalten
Benannte Pipes verhalten sich standardmäßig blockierend. Das bedeutet, dass ein Schreib- (oder Lese-) Vorgang wartet, bis ein Lese- (oder Schreib-) Vorgang auf der anderen Seite beginnt. Um dieses Verhalten zu vermeiden, können Sie den Prozess im Hintergrund ausführen (z. B. `cat < my_pipe &`) oder den nicht-blockierenden Modus mit dem `O_NONBLOCK`-Flag verwenden.
Verwendung von temporären Dateisystemen
Für temporär zu verwendende Pipes ist es ratsam, das Verzeichnis `/tmp` oder den Befehl `mktemp` zu verwenden, um Pipes mit eindeutigen Namen zu erstellen. Dies verhindert Namenskonflikte und stellt sicher, dass sie nach einem Systemneustart automatisch bereinigt werden.