Was UNIX Betriebssystem Programme werden verwendet, um die Named Pipes erstellen?

June 29

Im Betriebssystem Unix ist eine Pipe ein logisches System-Gerät, das zwischen zwei Unix-Prozessen kommuniziert. Seit eine Leitung überträgt Daten zwischen zwei Prozessen auf einer First-In-First-Out-Basis werden sie auch FIFO Rohre genannt. Es gibt zwei Arten von Rohren in Unix--benannten und unbenannten Rohre. Sie sind in Verhalten und Semantik identisch, außer dass benannte Pipes einen Namen und einen Eintrag in das Verzeichnis, eine Datei haben. Benannte Pipes bieten den Vorteil der Sicherheit mit Lese-/ Schreibzugriff Berechtigungen sowie automatischer Schutz vom System, wenn sie von vielen Prozessen gemeinsam genutzt werden.

Erstellen einer Named Pipes in der Befehlszeile

Die Programme "Mknod" und "Mkfifo" erstellen eine named Pipe an der Shell-Eingabeaufforderung. Es ist der erste Buchstabe im Eintrag "p", darauf hinweist, dass das Gerät eine Pipe ist. "0666" ist der Modus benutzt, die ist mit den aktuellen Wert der Umask geändert. Führen Sie das Programm "Man" für ausführliche manuelle Eingaben auf "Mknod" und "Mkfifo" auf Ihrem System. "Mknod" ist ein allgemeiner Befehl für alle Gerätetypen.

$ Mknod Nmpipe_multiway pOR$ Mkfifo Nmpipe_multiway 0666

Sehen Sie das Rohr als eine Verzeichnisliste:$ ls -l

Erstellen einer Named Pipes in einem C-Programm

Rufen Sie die Unix System Funktion mkfifo(), um die named Pipe in einem Programm zu erstellen.Der erste Parameter ist der Name der Pipe und der Weg dahin. "Mode" gibt die Zugriffsberechtigungen, mit denen Sie die named Pipe erstellen möchten. Die Funktion übernimmt die O_CREATE| O_EXCL Fahnen, was bedeutet, dass es einen Fehler geben wird, wenn die Leitung bereits vorhanden ist. Ein Rückgabewert von 0 (null) bedeutet, dass das Rohr erfolgreich erstellt wurde.

Der Funktionsprototyp ist: Int Mkfifo (const Char * Pfad, int Mode);

Öffnen Sie die Named Pipe

Rufen Sie die Unix System Funktion open() oder der standard C Bibliothek Anruf fopen() eine named Pipe als schreibgeschützt zu öffnen, nur schreiben oder lesen schreiben, gemäß dem Parameter das Programm übergibt. Im Gegensatz dazu werden unbenannte Rohre mit den pipe()-Aufruf erstellt. Verhalten der Funktion open() ist für alle Geräte, einschließlich Dateien identisch. Wenn erfolgreich, open() zurück, einen Geräte-Deskriptor und fopen() gibt den Zeiger auf die Struktur der C-Bibliothek "Datei." Mehrere Prozesse können Lese- und Schreibzugriff auf die named Pipe. Wenn ein Prozess die Pipe zum Lesen geöffnet wird, schläft es, bis ein anderer Prozess dieselbe Leitung für das Schreiben und umgekehrt öffnet. Die Unix-Kernel oder Core, weckt den schlafenden Prozess sobald die erwartete Ereignis auftritt.

Lese-/ Schreibzugriff auf FIFOs

Rufen Sie die Funktionen read() und write() zu Lese- und Schreibzugriff auf named Pipes. Mit Rohren ähnelt das FIFO-Konzept eines Prozesses zu einem Ende der Pipe und einem anderen Prozess aus anderen Ende lesen schreiben. Die Anzahl der Prozesse lesen möglicherweise nicht gleich der Anzahl der Prozesse, die schreiben. Wenn mehr als ein Prozess liest oder schreibt, die Prozesse die Operationen, die mit der Multi-tasking-Algorithmen in Unix zu koordinieren. Der Unix-Kernel behandelt die Daten in einem Rohr, wie es Dateidaten behandeln. Im Falle einer named Pipe erzwingt der Modus, in dem es geöffnet wird, erforderliche Sicherheit. Auch benannte Pipes werden automatisch geschützt, wenn von mehreren Prozessen gemeinsam genutzt: Synchronisation auf die Datenintegrität auf der programmer's Schulter fällt, wenn unbenannte Pipes verwenden.

Verwalten von voll oder leer-Rohre

Wenn ein Prozess versucht, Daten in eine Pipe zu schreiben und es keinen Raum gibt, bringt der Kernel den Prozess zu schlafen, bis das Rohr die Daten in den physischen Speicher schreibt. Ebenso setzt ein Leseversuch aus ein leeres Rohr den Prozess, bis ein anderer Prozess Daten in die Pipe schreibt zu schlafen. In diesen Fällen wird der Kernel benannten und unbenannten Rohre gleichermaßen behandelt.

Schließen Sie eine Named Pipe

Rufen Sie das System Funktion Close()-Methode oder Norm C Funktion fclose():, eine named Pipe zu schließen. Schließen eine named Pipe ist identisch mit dem Schließen einer Datei, außer dass der Kernel eine spezielle Prozedur folgt vor der Freigabe der Mittel durch die Leitung besetzt. Schlafende Prozesse warten, das Rohr zu lesen, der Unix-Kernel wacht sie auf und sie wieder aus der Funktion read() ohne Daten. Wenn es keine Prozesse auf diese Pfeife gelesen werden und einige Prozesse auf Write schlafend sind, Kernel wacht sie auf und sie wieder ohne Schrift. Beim Schließen einer Namen Pipes, behandelt der Kernel wie eine unbenannte Pipe aus Konsistenzgründen.