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

What Is System Call Linux



Ein Systemaufruf ist eine Funktion, die es einem Prozess ermöglicht, mit dem Linux-Kernel zu kommunizieren. Es ist nur eine programmatische Möglichkeit 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 das Gerät auf der am wenigsten potentiellen Stufe lädt und auf diesem arbeitet. 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 für 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 übersichtlich 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.



  • Offen
  • Nah dran
  • Ausführen
  • Schreiben
  • Lesen
  • Lseek
  • Auswählen

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 Open-Systemaufruf 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, die Inhalt enthält. Am Anfang müssen Sie also im Terminal über den Nano-Editor einen neuen Dateinamen vom Typ C new.c erstellen. Probieren Sie daher die einfache Nano-Anleitung aus.





$nanoneu.c

Nun wurde der Nano-Editor gestartet. Geben Sie den unten gezeigten Code ein. Wir haben zwei Dateideskriptoren im Code. Beide Dateien können mit dem Systemaufruf open geöffnet werden. Der erste Deskriptor enthält einen Leseaufruf und der zweite enthält die Schreibfunktion. Der erste offene Aufruf besteht darin, die Textdatei test.txt zu öffnen und ihren Inhalt im Dateideskriptor fd zu speichern. Der zweite offene Systemaufruf erstellt eine Datei namens target. Das Dokumentziel 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 schließen.



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

$gccneu.c

Führen wir den Code mit der einfachen a.out-Abfrage in der Shell wie folgt aus:

$./a.out

Die Ausgabedaten wurden an das Dateiziel übertragen. Lassen Sie uns die Zieldatei mit der cat-Abfrage überprüfen. Der Ausgabebildschirm zeigt die 20-Zeichen-Daten in der Zieldatei an.

$KatzeZiel

Exec-Systemaufruf:

Der exec-Systemaufruf wird abgewiesen, um eine Datei auszuführen, die gerade verarbeitet wird. Die frühere ausführbare Datei wird ersetzt und die aktuelle Datei wird bei jedem Aufruf von exec ausgeführt. 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 bei jedem Aufruf von exec() in der Anweisung 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:

$nanoexp.c

Der Editor ist jetzt geöffnet. Schreiben Sie den gesamten folgenden C-Sprachcode hinein. Darin sind drei Hauptbibliotheken enthalten. Danach wurde die Hauptfunktion instanziiert. Die print-Anweisung hat die String-Daten und die Prozess-ID der Datei exp.c angezeigt. Zu diesem Zweck wurde die Funktion getpid() verwendet. Dann haben wir ein Array vom Zeichentyp mit einigen Werten darin. Der exec-Systemaufruf wurde verwendet, um den Dateinamen und das eine Zeile darüber liegende Array als Argument zu verwenden. Nun wird die Datei hello.c 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 zum Beenden.

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

$nanoHallo 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 hello.c ist.

Lassen Sie uns beide Dateien nacheinander mit gcc kompilieren.

$gcc–o exp.c

$gcc–O hallo hallo.c

Wenn wir die Datei exp.c ausführen, gibt sie die erste print-Anweisung aus der Datei exp.c und beide Druckzeilen aus der Datei hello.c aus.

$./exp

Abschluss:

Wir haben das gesamte Konzept von Linux-Systemaufrufen und wie sie in Ihrem Linux-System verwendet werden können, erläutert. Bei der Umsetzung dieses Konzepts haben wir Ubuntu 20.04 verwendet.