Startseite > Datei- und Verzeichnisverwaltung > mkfifo

mkfifo: Erstellt eine benannte Pipe

`mkfifo` ist ein Befehl, der eine benannte Pipe (FIFO, First-In, First-Out) erstellt. Eine benannte Pipe ist eine spezielle Datei im Dateisystem, die als Kommunikationskanal für den Datenaustausch zwischen verschiedenen Prozessen dient. Im Gegensatz zu anonymen Pipes können benannte Pipes über ihren Dateipfad angesprochen werden, was die Kommunikation zwischen unabhängigen Prozessen erleichtert.

Ü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.


Gleiche Kategorie Befehle