C-Programmierung

Codierung mit fork und exec am Beispiel in c

Codierung mit fork und exec am Beispiel in c
Der Titel unseres Artikels enthält zwei verschiedene Funktionen der Sprache C, die beim Ausführen eines beliebigen Programms in unserem System auftreten. Leider besteht in C . keine Möglichkeit, mehr als ein Programm gleichzeitig auszuführen. Zu einem bestimmten Zeitpunkt kann nur eine einzige Aufgabe ausgeführt werden, was bedeutet, dass gleichzeitige Programme nicht ausgeführt werden können. Es führt dazu, dass Sie auf den Abschluss eines Prozesses warten, um den anderen auszuführen. Um dieses Problem bei der Fehlerbehebung zu vermeiden, müssen Sie Ihr Programm möglicherweise auf eine gute Weise entwickeln, da Sie ein guter Entwickler sind. Linux fork() wird verwendet, um das Warten zu überwinden und Parallelität in Ihrem System zu ermöglichen. Es hilft beim Duplizieren eines neuen Prozesses und erstellt einen neuen durch Aufrufen des duplizierten Prozesses. Der neue Prozess ist der untergeordnete Prozess und der vorherige wird als übergeordneter Prozess bezeichnet.

Während die Funktion exec() verwendet wird, um das aktuell vorhandene Programm durch das neue zu ändern. Diese Ersetzung erfolgt durch Änderungen des Inhalts eines Programms oder einer Datei. Der Unterschied zwischen fork und exec besteht also darin, dass fork einen neuen Prozess aus dem vorhandenen Prozess erstellt und exec verwendet wird, um das vorhandene Programm durch das Erstellen eines neuen zu ersetzen.

Voraussetzungen

Um ein c-Programm auf Ihrem Linux-System auszuführen, müssen wir einige Voraussetzungen darauf installieren. Gehen Sie zum Terminal, indem Sie die Tastenkombination Strg+Alt+T . verwenden. Schreiben Sie nun die folgenden Befehle, um die Manpages zu installieren.

$ sudo apt install manpages-dev

Es werden alle entsprechenden Seiten installiert.

Um ein Programm unter Linux auszuführen, müssen Sie einen Code-Compiler installieren. Das wird verwendet, um den Code zu kompilieren und auszuführen. Zu diesem Zweck werden wir GCC-Repositorys in unserem System installieren.

$ sudo apt install GCC

Codierung mit exec in c

Da wir die Manpages in Linux installiert haben, verwenden wir den folgenden Befehl, um die Beschreibung zu exec . anzuzeigen. Die primäre Beispielsyntax lautet wie folgt:

Syntax

Exec (Pfadname/Datei, argv );

Hier haben wir die „unistd“ verwendet.h“-Header, da er alle Informationen zu den Familien der exec-Funktion enthält.

$ man exec

Im oben zitierten Bild können Sie nun die Arten von exec. Dies ist die Familie der Exec-Funktionen. Jeder ist für eine andere Funktion, die der gleichen Basis folgt, „exec“.”

Beispiel: Im weiteren Verlauf beschreiben wir die Funktionalität von exec anhand eines Beispiels. Wir nehmen eine Funktion von exec, um ihre Funktionsweise zu demonstrieren, nämlich „execv.” Zuerst erstellen wir zwei Dateien mit der Erweiterung “.c.” Nach ihrer Erstellung schreiben wir entsprechende Codes hinein und führen sie aus, um das Ergebnis zu sehen.

Betrachten Sie einen Dateinamen „sample4“.c”. Bitte öffnen Sie es und verwenden Sie den folgenden Code. In diesem Code haben wir execv in einer bestimmten unten angegebenen Weise verwendet used.

Ausführung ("./sample4copy”, Argumente);

Der erste Teil enthält den neuen Verzeichnispfad und der zweite Teil zeigt das Array arguments als übergebenen Parameter parameter.

Probe4.c

Als erstes haben wir die ID des aktuellen Prozesses gedruckt. Zweitens haben wir ein Zeichenarray mit NULL am Ende für die Beendigung erstellt. Drittens haben wir die Funktion sample4copy aufgerufen.

Sample4copy.c

Beim Aufruf der exec-Funktion() wird das Prozessabbild geändert. Das unten zitierte Bild unten zeigt den Code von sample4copy.c.

Hier haben wir nur print-Anweisungen verwendet, um die ID des aktuellen Prozesses zu erhalten.

Die Ausgabe der jeweiligen Codes kann mit den folgenden Befehlen erreicht werden.

$ GCC-o Beispiel4 Beispiel4.c
$ GCC -o sample4copy sample4copy.c
$ ./probe4

Wie bereits beschrieben, wird das Wort „GCC“ verwendet, um den Code zu kompilieren, und nach der Kompilierung wird der Code erfolgreich ausgeführt.

Laut Bild ist die PID von sample4.c-Datei wird zuerst so angezeigt, wie sie vor dem exec-Aufruf deklariert wurde. Nachdem die Funktion exec() aufgerufen wurde, werden beide print-Anweisungen der Datei sample4copy.c wird ausgeführt, wobei getpid() verwendet wird, um die ID des Prozesses zu erhalten.

Codieren mit einer Gabel in c

Die Funktion fork() erstellt den Kindprozess aus dem Elternprozess. Es enthält auch zwei Header, einschließlich der darin enthaltenen Fork-Informationen.

Syntax:

Pid_t Gabel(leer);

Wir können die Manpage verwenden, um Hilfe bei der Verwendung zu erhalten

$ Mann Gabel

Beispiel: Betrachten Sie nun ein Beispiel, indem Sie eine Datei „sample3“ erstellen.c”. Wir geben den Code in die Datei ein. Laut Code haben wir den Fork-Status auf forkrank gesetzt.

Probe3.c

Wir haben die „if-else“-Anweisung verwendet, um die Bedingung anzuwenden. Hier werden einfache Druckbefehle deklariert, um das Verständnis des fork()-Konzepts zu erleichtern. Forkrank wird zuerst als 0 und dann als -1 . deklariert. Mit einem fork() gibt es jetzt zwei Prozesse, die gleichzeitig arbeiten. Die Ausgabe kann mit dem gleichen Code wie oben im exec-Beispiel erhalten werden.

$ GCC -o Beispiel3.c
$./probe3

Die Ausgabe zeigt, dass der untergeordnete Prozess früher ausgeführt wird als der übergeordnete Prozess, als der übergeordnete Prozess wartete. Die Wait-Funktion impliziert, dass sie die Parent-Funktion warten lässt, bis einer der Child-Prozesse beendet wird.

Fork- und Exec-Systemaufrufe gemeinsam

Hier nehmen wir zwei Dateien mit dem Namen "sample1".c“ und „sample2“.c”. Öffnen Sie zunächst die Datei sampl1.c und schreibe den Code, der unten im Bild angehängt ist. Wir haben hier den Systemaufruf fork() verwendet; wenn der untergeordnete Prozess erstellt wird, wird p mit 0 . belegt. Bei Verwendung von exec system-call wird das Beispiel1.c wird ersetzt durch sample2.c.

Probe1.c

Probe2.c

Ähnlich wie in den oben besprochenen Beispielen enthält die Datei sample2 die printf-Anweisungen. In Probe1.c, der erste Druckbefehl wird zuerst ausgeführt, dann wird die fork-Funktion aufgerufen, wenn p== 0, dann wird der Kindteil ausgeführt und sample2.c-Datei wird ausgeführt. Die Ausgabe enthält GCC, um beide Dateien zu kompilieren. Hier Elternprobe1.c id und probe2.c id ist anders, weil sie Elternteil und Kind sind.

Fazit

In diesem Artikel haben wir sowohl fork als auch exec separat und gemeinsam verwendet, um die Verwendung und das Konzept leicht zu verstehen. Ich hoffe, dieses Tutorial enthält genügend Inhalte, die zu einem Zugang zur Eskalation Ihres Wissens führen.

So steigern Sie die FPS unter Linux?
FPS steht für Bilder pro Sekunde. Die Aufgabe von FPS besteht darin, die Bildrate bei Videowiedergaben oder Spielleistungen zu messen. In einfachen Wo...
Top Oculus App Lab-Spiele
Wenn Sie Besitzer eines Oculus-Headsets sind, müssen Sie über Sideloading informiert sein. Sideloading ist der Prozess der Installation von Inhalten, ...
Top 10 Spiele zum Spielen auf Ubuntu
Die Windows-Plattform war eine der dominierenden Plattformen für Spiele aufgrund des großen Prozentsatzes von Spielen, die heute entwickelt werden, um...