Systemaufrufe

Was ist ein Systemaufruf in Linux und wie funktioniert er mit Beispielen?

Was ist ein Systemaufruf in Linux und wie funktioniert er mit Beispielen?

Ein Systemaufruf ist eine Funktion, die es einem Prozess ermöglicht, mit dem Linux-Kernel zu kommunizieren. Es ist nur ein programmatischer Weg für ein Computerprogramm, eine Einrichtung vom Kernel des Betriebssystems zu bestellen. Systemaufrufe machen die Ressourcen des Betriebssystems Benutzerprogrammen über eine API (Application Programming Interface) zugänglich. Systemaufrufe können nur auf das Kernel-Framework zugreifen. Systemaufrufe werden für alle Dienste benötigt, die Ressourcen benötigen.

Der Linux-Kernel ist eine proprietäre Software, die auf dem Gerät mit dem geringsten Potenzial geladen und ausgeführt wird. Seine Aufgabe besteht darin, alles zu organisieren, was auf dem Computer passiert, von Tastatur-, Festplatten- und Netzwerkereignissen bis hin zur Bereitstellung von Zeitscheiben für die gleichzeitige Ausführung verschiedener Programme. Die Trennung von Software und Hardware schafft eine sichere Blase, die den Schutz und die Zuverlässigkeit verbessert. Nicht privilegierte Anwendungen können den Speicher anderer Programme nicht erreichen, und wenn einer fehlschlägt, unterbricht der Kernel den Prozess, damit er nicht das gesamte System beschädigt.

Hauchdünner Wrapper:

Die Linux-Systemaufrufe werden in bestimmten Programmen nicht explizit an den Kernel gerendert. Fast alle Programme verwenden die grundlegende C-Bibliothek und bieten einen leichten, aber unverzichtbaren Wrapper über die Linux-Systemaufrufe. Das Repository stellt dann den begleitenden Linux-Maschinenaufruf bereit, nachdem sichergestellt wurde, dass die Funktionsparameter in die richtigen Prozessorregister übersetzt wurden. Immer wenn der Wrapper Daten vom Systemaufruf erhält, analysiert er diese und trägt sie eindeutig in das Programm ein. Jede maschineninteraktive Operation in einem Programm wird letztendlich in einen Systemaufruf umgewandelt. Schauen wir uns also einige davon an. Es gibt eine lange Liste von Linux-Systemaufrufen, die wir in unserem Linux-System verwenden können. Hier ist die Liste einiger gebräuchlicher und am häufigsten verwendeter Linux-Systemaufrufe.

Lassen Sie uns in unserem Artikel einige der Linux-Systemaufrufe mit der Sprache C besprechen, um sie praktisch anzuwenden.

Systemaufruf öffnen:

Wir können den Systemaufruf „Open“ in unserer Linux-Distribution verwenden, um das Dokument schnell zu öffnen, das wir in unserem Code der Sprache C angeben werden. Starten Sie zuerst das Befehlsterminal. Sie können die Tastenkombination „Strg+Alt+T“ verwenden. Angenommen, Sie haben eine Textdatei „test“.txt“ im Home-Verzeichnis, und es enthält einige Inhalte darin. Am Anfang müssen Sie also einen neuen Dateinamen vom Typ C erstellen "new".c“ im Terminal über den Nano-Editor. Probieren Sie daher die einfache Nano-Anleitung unten aus.

$ nano neu.c

Jetzt ist der Nano-Editor gestartet. Geben Sie den unten gezeigten Code ein. Wir haben zwei Dateideskriptoren im Code. Beide Dateien können mit dem Open-Systemaufruf geöffnet werden. Der erste Deskriptor enthält einen Leseaufruf und der zweite enthält die Schreibfunktion. Der erste offene Aufruf ist das Öffnen der Textdatei „test“.txt“ und speichert seinen Inhalt im Dateideskriptor „fd“. Der zweite offene Systemaufruf erstellt eine Datei namens „target“. Das Dokument „Ziel“ wurde an einen „fd1“-Dateideskriptor zurückerstattet. Der Schreibbefehl wird verwendet, um die Datenbytes im Puffer zu transkribieren. Tippen Sie auf „Strg+S“, um den Code zu speichern und drücken Sie die Tastenkombination „Strg+X“, um die Datei zu beenden.

Führen Sie die gcc-Compile-Anweisung aus, um diesen C-Code zu kompilieren.

$ gcc neu.c

Lassen Sie uns den Code mit dem einfachen „a.out“-Abfrage in der Shell wie folgt:

$ ./ein.aus

Die Ausgabedaten wurden in die Datei „Ziel“ übertragen. Lassen Sie uns die Datei „target“ mit der Abfrage „cat“ überprüfen. Der Ausgabebildschirm zeigt die 20-stelligen Daten in der „Ziel“-Datei an.

$ Katzenziel

Exec-Systemaufruf:

Der exec-Systemaufruf wird abgewiesen, um eine Datei auszuführen, die gerade verarbeitet wird. Die vorherige ausführbare Datei wird ersetzt und die aktuelle Datei wird immer dann ausgeführt, wenn exec aufgerufen wird. Bei Verwendung eines exec-Systemaufrufs können wir davon ausgehen, dass dadurch das alte Dokument oder die Anwendung in der Schleife mit einem neuen überschrieben wird. Neue Software wird verwendet, um das Material des gesamten Prozesses zu überschreiben. Das Dokument, dessen Titel in der Anweisung bei jedem Aufruf von exec() angegeben wird, wird durch den Abschnitt mit den Benutzerinformationen ersetzt, der den Systemaufruf exec() ausführt (). Öffnen Sie also das Kommandoterminal und erstellen Sie mit dem Nano-Editor eine neue Datei vom Typ C wie folgt:

$ nano exp.c

Der Editor wurde jetzt geöffnet. Schreiben Sie den gesamten untenstehenden C-Sprachcode hinein in. Es sind drei Hauptbibliotheken darin enthalten. Danach wurde die Hauptfunktion instanziiert. Die print-Anweisung hat die String-Daten und die Prozess-ID der Datei „exp“ angezeigt.c”. Zu diesem Zweck wurde die Funktion getpid() verwendet. Dann haben wir ein Array vom Typ Zeichen mit einigen Werten darin. Der exec-Systemaufruf wurde verwendet, um den Dateinamen und das eine Zeile darüber liegende Array als Argument zu verwenden. Jetzt die Datei „Hallo.c“ wird verarbeitet. Danach kommt so weit eine weitere print-Anweisung, die aber nie ausgeführt wird. Drücken Sie „Strg+S“, um diese Datei zu speichern. Drücken Sie "Strg+X", um zu beenden.

Jetzt ist es an der Zeit, eine weitere c-Datei zu erstellen, "Hallo".c“ mit dem Nano-Editor. Verwenden Sie dazu die folgende Abfrage in der Shell.

$ nano hallo.c

Schreiben Sie den folgenden Code hinein. Dieser Code enthält zwei print-Anweisungen in der Hauptfunktion. Die erste druckt nur eine darin angegebene Zeichenfolge, und die zweite druckt die Zeichenfolge, während die Prozess-ID der aktuell verwendeten Datei abgerufen wird, die "Hallo" ist.c”.

Lassen Sie uns beide Dateien nacheinander mit gcc kompilieren.

$ gcc -o exp exp.c

$gcc -o hallo hallo.c

Wenn wir die exp . ausführen.c-Datei, wird die erste print-Anweisung aus dem exp . ausgegeben.c-Datei und die beiden Druckzeilen vom hallo.c-Datei.

$ ./exp

Fazit:

Wir haben das gesamte Konzept von Linux-Systemaufrufen und wie sie in Ihrem Linux-System verwendet werden können, ausgearbeitet. Wir haben Ubuntu 20 verwendet.04 bei der Umsetzung dieses Konzepts.

So zeigen Sie OSD-Overlay in Vollbild-Linux-Apps und -Spielen an
Das Spielen von Spielen im Vollbildmodus oder die Verwendung von Apps im ablenkungsfreien Vollbildmodus kann Sie von relevanten Systeminformationen ab...
Top 5 Karten zur Spielaufnahme
Wir alle haben Streaming-Gameplays auf YouTube gesehen und geliebt. PewDiePie, Jakesepticye und Markiplier sind nur einige der Top-Gamer, die Millione...
So entwickeln Sie ein Spiel unter Linux
Vor einem Jahrzehnt hätten nicht viele Linux-Benutzer vorhergesagt, dass ihr Lieblingsbetriebssystem eines Tages eine beliebte Spieleplattform für kom...