Benannte Pfeife

Im Computer, a benannte Pfeife (auch bekannt als a FIFO für sein Verhalten) ist eine Erweiterung des Traditionellen Rohr Konzept auf Unix und Unix-artig Systeme und ist eine der Methoden von Interprozesskommunikation (IPC). Das Konzept ist auch in gefunden in OS/2 und Microsoft Windows, obwohl die Semantik erheblich unterschiedlich ist. Eine traditionelle Pfeife ist "unbenannt"Und dauert nur so lange wie der Vorgang. Ein benanntes Rohr kann jedoch so lange dauern, wie das System abgelaufen ist, über die Lebensdauer des Prozesses hinaus. Es kann gelöscht werden, wenn sie nicht mehr verwendet werden. Normalerweise erscheint eine benannte Rohr als Datei und im Allgemeinen Prozesse für IPC an sie angeschlossen.

In Unix

Anstelle einer konventionellen, unbenannten Shell -Pipeline verwendet eine benannte Pipeline die Dateisystem. Es wird explizit mit Verwendung erstellt mkfifo ()[1] oder mknod (),[2] und zwei getrennte Prozesse Kann mit Namen auf die Pfeife zugreifen - ein Vorgang kann sie als Leser und der andere als Schriftsteller öffnen.

Zum Beispiel kann man ein Rohr erstellen und einrichten gzip Um die Dinge zu komprimieren, die darauf gelobt wurden:

mkfifo my_pipe gzip -9 -c <my_pipe> out.gz & 

In einer separaten Prozesshülle kann man unabhängig voneinander die zu komprimierten Daten senden:

Katzendatei> my_pipe

Das benannte Rohr kann wie jede Datei gelöscht werden:

rm my_pipe

Ein benanntes Rohr kann verwendet werden, um Informationen von einer Anwendung auf eine andere ohne Verwendung einer Zwischendatei zu übertragen. Sie können beispielsweise die Ausgabe von GZIP in ein benanntes Rohr wie SO bringen (hier Out.gz stammt aus dem obigen Beispiel, aber es kann jeder GZ sein):

mkfifo -m 0666 /tmp/namedpipe gzip -d <out.gz>/tmp/namedPipe

Laden Sie dann die unkomprimierten Daten in a Mysql Tisch[3] Like SO:

BELASTUNG DATEN IM ORDNER '/tmp/namedPipe' ' HINEIN TISCH Tabellenname; 

Ohne diese benannte Pipe müsste man die gesamte unkomprimierte Version von Datei.gz ausschreiben, bevor sie in MySQL geladen wird. Das Schreiben der temporären Datei ist sowohl zeitaufwändig als auch mehr zu mehr I/o und weniger freier Platz auf der Festplatte.

PostgreSQLNutzungsunternehmen des Befehlszeilens, PSQLunterstützt auch das Laden von Daten von benannten Pipes.[4]

In Fenstern

Auf ein benanntes Rohr kann wie eine Datei zugegriffen werden. Win32 SDK -Funktionen Erstelle Datei, Readdatei, Schreibfile und Nahe Handle Öffnen, lesen, schreiben, an und schließen Sie eine Pfeife. Im Gegensatz zu Unix gibt es keine Befehlszeilenschnittstelle, ausser für Power Shell.

Benannte Pipes können im Gegensatz zu Unix nicht als Dateien in einem normalen Dateisystem erstellt werden. Auch im Gegensatz zu ihren UNIX -Gegenstücken sind benannte Rohre flüchtig (entfernt, nachdem der letzte Verweis auf sie geschlossen ist). Jedes Rohr wird in das Stammverzeichnis des benannten Pipe -Dateisystems (NPFS) platziert, das unter dem speziellen Pfad montiert ist \\.\Rohr\ (Das heißt, eine Pfeife namens "Foo"hätte einen vollständigen Pfadnamen von \\. \ Pipe \ foo). Anonyme Rohre, die in Pipelining verwendet werden, werden tatsächlich Pipes mit einem zufälligen Namen genannt.

Sie werden von Benutzern sehr selten gesehen, aber es gibt bemerkenswerte Ausnahmen. Das VMware Workstation PC Hardware- Virtualisierung Das Werkzeug kann beispielsweise emuliert entlarven serielle Ports zum Hostsystem als benannte Rohre und der Windbg Kernelmodus Debugger aus Microsoft Unterstützt benannte Pipes als Transport für Debugging -Sitzungen (in der Tat können VMware und Windbg miteinander gekoppelt werden - da Windbg normalerweise eine serielle Verbindung zum Zielcomputer benötigt - Leting Treiber Entwickler Führen Sie ihre Entwicklung und Prüfung auf einem einzelnen Computer durch). Beide Programme verlangen von dem Benutzer, Namen in die Eingabe von Namen zu geben \\. \ Pipe \ Name bilden.

Windows NT Named Pipes können einen Sicherheitskontext erben.

Zusammenfassung der benannten Pipes auf Microsoft Windows:

Das .NET Framework 3.5 hat benannte Pipe Support hinzugefügt.[5]

Mit benannte Rohre können auch als Endpunkt in verwendet werden Microsoft SQL Server.[6]

Namensrohre sind auch ein Netzwerkprotokoll in der Server -Nachrichtenblock (SMB) Suite, basierend auf der Verwendung eines Special Interprozesskommunikation (IPC) Freigabe. Das IPC von SMB kann den Authentifizierungskontext des Benutzers nahtlos und transparent an genannte Pipes übergeben. Windows NT ist das gesamte NT -Domäne Die Protokollsuite von Diensten wird als implementiert als DCE/RPC Service über benannte Pipes, ebenso wie die administrativen Anträge von Exchange 5.5.

Siehe auch

Verweise

  1. ^ "MKFIFO, MKFIFOAT - Machen Sie eine FIFO -Sonderdatei". IEEE STD 1003.1-2017. Die offene Gruppe.
  2. ^ "Mknod, Mknodat - Erstellen Sie Verzeichnis, Sonderdatei oder reguläre Datei". IEEE STD 1003.1-2017. Die offene Gruppe.
  3. ^ "13.2.7 Datenanweisung laden". MySQL 8.0 Referenzhandbuch. Mysql.
  4. ^ Aidan Van Dyk (2008-03-27). "Re: PSQL und benannte Pipes". PGSQL-Hackers. PostgreSQL.
  5. ^ "System.io.Pipes Namespace". Microsoft Developer Network.
  6. ^ "So stellen Sie eine Verbindung zum SQL Server mit einer früheren Version von SQL Server her". Microsoft. 2019-11-19. Abgerufen 2020-05-19.

Externe Links