MKNOD -Beispiel in C

MKNOD -Beispiel in C

Ein namentliches Rohr, das manchmal als FIFO bezeichnet wird. Es ist eine Linux -Version des klassischen Pipe -Begriffs. Eine traditionelle Pfeife ist „namenlos“ und dauert nur so lange wie das Verfahren. Andererseits kann ein benanntes Rohr so ​​lange dauern, wie das System in Betrieb ist, auch wenn der Prozess nicht mehr aktiv ist. Wenn es nicht mehr benötigt wird, kann es entfernt werden. Ein benanntes Rohr wird normalerweise als Datei angezeigt, und Prozesse stellen eine Verbindung zum Inter-Process-Interaktion heran.

Eine FIFO. Der Hauptnachteil von Rohren besteht darin, dass sie nur von einem Prozess verwendet werden können, bei dem sowohl Leser als auch Autoren oder Prozesse, die dieselbe Dateideskriptorliste verwenden, haben können. Infolgedessen haben Rohre einen großen Nachteil: Sie können Daten nicht über Prozesse hinweg weitergeben, die nicht verwandt sind. Dies ist, da sie keine Dateideskriptorentabelle freigeben. Wenn die Rohre jedoch Namen sind, können sie genau wie jede andere Datei gelesen und geschrieben werden. Die Prozesse müssen nicht einmal eine Verbindung herstellen.

Benannte Pfeifen sind FIFO, ich.e. Erstens, zuerst Pipes. Die Schale kann verwendet werden, um FIFOs zu erzeugen. Sie können jedoch mit der C -Programmierung mit dem Aufruf von Mknod () durchgeführt werden. Die Modusoption bestimmt die Berechtigungen, die verwendet werden, sowie die Art des Knotens, der generiert wird. Es sollte bitweise oder konjunktion eines der unten angegebenen Dateitypen und der Privilegien des neuen Knotens sein. Die Ummask des Prozesses verändert die Berechtigungen wie gewohnt: die Berechtigungen des erzeugten Knotens. Wenn Mknod () erfolgreich ist, gibt es Null zurück; Ansonsten kehrt es -1 zurück.

Syntax

int mknod (const char *nameofPath, modus_t modus, dev_t dev);

Der Pfadname, den Sie für die Datei verwenden, ist der Pfadname. Eine Reihe von Bits, die den Dateityp beschreiben und auf Berechtigungen zugreifen, die Sie verwenden möchten, ist als "Modus" bezeichnet. S_IFDIR, mit dem ein Verzeichnis erstellt wird, und S_ififo, das zur Festlegung eines FIFO verwendet wird, sind die einzigen zulässigen Dateitypen. Meistens wird Dev „ignoriert.”

Beispiel

Nachdem wir das grundlegende Konzept und die Syntax des MknOD () -Systemaufrufs in C -Programmiersprache erläutert haben, haben wir ein Beispiel für das Verständnis unseres Benutzers definiert. Wir implementieren unseren Beispielcode im Ubuntu 20.04 Linux -Betriebssystem mit einem GCC -Compiler für die Codeausführung und -Kompilation. Wir haben den Befehl nano in der Shell für die Erstellung der Datei verwendet. Um ein Beispiel in der C -Sprache auszuführen, haben wir die „verwendet“.C ”Dateierweiterung.

Lassen Sie uns den angegebenen Befehl unten in der Konsole des Ubuntu 20 ausführen.04 Linux -Betriebssystem für die Dateierstellung.

$ nano w.C

In unserem Fall lautet der Dateiname „W.C ”Sie können es auch ändern. Jetzt wird die Datei erstellt und im GNU -Editor geöffnet. Sie müssen das Skript schreiben, das im folgenden Bild gezeigt wird.

Das Skript kann nach Ihrer Arbeit geändert werden, aber für diesen Zweck müssen Sie dieses grundlegende Beispiel vollständig verstehen. Der Standarddateideskriptor für ein Programm zum Schreiben von Warnmeldungen ist gesteuert, häufig als Standardfehler bezeichnet. Der Fehler wird mithilfe von Lenkrettern auf den Ausgangsbildschirm oder die Fensterklemme gedruckt. Steer war einer der Befehlsausgänge, ähnlich wie bei STDOut, das oft an anderer Stelle protokolliert wird. S_irusr ist eine posix -Makrokonstante in sys/stat. H. Der Benutzer -Leser -Berechtigungsbit heißt, es heißt es. Das Präfix S_ RUSR kann sich auf den Status beziehen, z. B. auf das Lesen des Benutzers. S_irusr ist eine posix -Makrokonstante in sys/stat. H. Der Benutzer -Lesezugriffs -Bit heißt, es heißt es. Das Präfix S_ RUSR kann sich auf den Status beziehen, z. B. auf das Lesen des Benutzers. Wir möchten dem Benutzer in dieser Situation den Benutzer lesen und schreiben. Infolgedessen setzen wir den Modus auf S iRUSR | S iwusr | S ififo. Dev wird verifiziert, wenn der Dateityp S_ifchr oder S_ifblk ist; Es wird jedoch ignoriert.

Infolgedessen haben wir 0 als Parameter verwendet. Die PERROR () -Methode gibt eine Standardfehlermeldung zurück, in der der neueste Fehler beim Aufrufen eines Systems oder einer Bibliotheksfunktion detailliert ist. Nach dem Schreiben und Verständnis des Skripts müssen Sie die Datei schließen und einfach zur Konsole zurückkehren. Lassen Sie uns den folgenden Befehl im Ubuntu 20 ausführen.04 Linux -Betriebssystemkonsole für Skriptkompilierung und Ausführung.

$ gcc w.C
$ ./A.aus

Wenn Sie sich das obige Bild ansehen, können Sie leicht feststellen, dass bei der Zusammenstellung kein Fehler auftritt. Die erwartete Ausgabe ist auch auf dem Bildschirm zu sehen.

Abschluss

In diesem Artikel drehte sich alles um Mknod () -Systemaufruf in C -Programmiersprache C. Wir haben unser Bestes versucht, Sie auf die grundlegende Verwendung des Mknod () -Systemanrufs aufzuklären. Die Syntax des Systems Mknod () wurde für das Verständnis des Benutzers erläutert. Das in diesem Handbuch verwendete Beispiel ist sehr einfach, und Anfänger können auch im ersten Fall verstehen. Ich hoffe.