Fork -Systemaufruf in c

Fork -Systemaufruf in c

„Der grundlegende Zweck der Fork -Befehlsmethode besteht darin, ein oder mehrere untergeordnete Prozesse zu erstellen. Die neu erstellten untergeordneten Prozesse werden gleichzeitig mit dem übergeordneten Prozess ausgeführt, aus dem diese untergeordneten Prozesse mithilfe von Gabelanweisungen erstellt wurden. Die nächste Aussage, nach der der Fork -Befehl folgt. Dieselben CPU -Register, der Programmzähler (PC) und offene Dateien, die der übergeordnete Prozess zugreifen, werden vom untergeordneten Prozess verwendet. Der Fork -Befehl nimmt keinen Parameter als Eingabe an, gibt jedoch einen Ganzzahlwert zurück, indem wir leicht erkennen können, ob entweder der Fork -Befehl den untergeordneten Prozess erfolgreich erstellt hat oder nicht.”

Nachfolgend finden Sie die Liste der Werte, die nach der Fork -Methode zurückgegeben werden:

  • Negativer Wert: Der Prozess der Erstellung eines Kinderprozesses schlug fehl.
  • Null: Der gerade erstellte Kinderprozess wurde zurückgegeben.
  • Positiver Wert: Mit einem positiven Wert an den Anrufer oder Elternteil zurückgegeben. Die Prozess -Prozess -ID des neu generierten Kinderprozesses ist im Wert enthalten.

Eine Sache, die Sie beachten sollten, ist, dass Gabel eine Threading -Methode ist. Daher die Ergebnisse zu sehen; Sie müssen den Prozess auf dem lokalen System ausführen. Für den Befehl fork kann bestimmte Header- oder Bibliotheksdateien erforderlich sein, z. B. Systeme/Typen.H und Unistd.H. Sie müssen ein Linux- oder UNIX-basiertes Betriebssystem so konfigurieren, dass das Programm ausgeführt wird, da der Fork-Befehl nicht in einer Windows-Umgebung verwendet werden kann. Sie müssen zunächst bestätigen, dass der GCC -Compiler in der Betriebssystemumgebung eingerichtet wurde. Um dies zu erreichen.2.0 wurde installiert.

Bevor Sie an den C -Code -Snippets arbeiten, sollten Sie Ihr System pflegen und aktualisieren. Der Grund für das Update besteht darin, die bevorstehenden Probleme im Zusammenhang mit den neuesten Versionen von Linux zu erfüllen. Probieren Sie also die folgende Abfrage "Update" aus und machen Sie Ihren Linux auf dem neuesten Stand.

Beispiel 1

Beginnen wir mit dem einfachsten und einfachsten Programm, in dem wir nur eine einzelne Gabelmethode und eine einfache Druckanweisung verwenden. Die Programme erforderten Header -Dateien, die in den ersten drei Zeilen des Codes aufgeführt sind. Die Fork () -Methode wird in der Öffnungszeile der Hauptmethode aufgerufen. Der Fork -Befehl erstellt einen untergeordneten Prozess, der gleichzeitig die unten stehende Erklärung ausführt. Infolgedessen wird die Druckanweisung zweimal auf dem Shell -Bildschirm angezeigt, wenn das Programm ausgeführt wird. Lassen Sie uns den Befehl in der Umgebung von Ubuntu schreiben. Wir müssen die Datei mit dem Nano -Editor erstellen, aber Sie können Ihre Wahl verwenden. Geben Sie den folgenden Befehl ein, um die neue Datei zu erstellen:

Nano Forkthread.C

Wenn der Editor eine Datei im Bearbeitungsmodus öffnet, ist sie leer. Daher müssen wir den Code dort eingeben, bevor wir die Datei schließen und speichern. Dem Befehl Fork muss eine Erklärung vorausgehen, die angibt, dass der Kinderprozess nach diesem Befehl gestartet wird. Nach der Gabel wird die Druckerklärung zweimal, einmal vom übergeordneten Prozess und dann vom neu etablierten Kinderprozess ausgeführt. Diese Erklärung wird nur einmal ausgeführt.

#enthalten
#enthalten
#enthalten
int main ()
printf ("vor der Gabelmethode.\N");
Gabel();
printf ("Kinderprozess erstellt.\N");
Rückkehr 0;

Nach dem Speichern und Schließen des Forkthreads.c Datei müssen wir jetzt den GCC -Compiler verwenden, um die C -Datei zu kompilieren und die Ausgabedatei mit dem folgenden Befehl zu erstellen.

GCC ForkThread.C -o Forkthread.aus

Die C -Datei wird vom GCC -Compiler zusammengestellt und die Ergebnisse werden auf das ForkThread gespeichert.aus der Datei. Wenn Sie jedoch das -o -Flag nicht verwenden, speichert der GCC -Compiler die Ausgabe in der a.OUT -Datei, die nach der Zusammenstellung des Standardnamens ist. Das Bild zeigt, wie wir die C -Datei mit dem obigen Befehl kompilieren können.

Die Kompilierungsergebnisse zeigen, dass es keine Syntax- oder semantischen Fehler in unserem Code gab, was beweist, dass sie erfolgreich zusammengestellt wurden und dass die Ausgabedatei erfolgreich generiert wurde. Sie können die Ergebnisse jetzt anzeigen, nachdem die Ausgabedatei ausgeführt wurde. Geben Sie einfach den kurzen Befehl unten ein, um dies zu erreichen:

./Forkthread.aus

Beispiel 2

In diesem Beispiel zählen wir die Fälle, in denen ein Code -Stück, das zahlreiche Fork () -Leitungen enthält, ausgeführt wird. Wir müssen zahlreiche Gabelmethoden schreiben und den vorhandenen Code ändern. Sie sollten sich bewusst sein, dass die Häufigkeit, mit der ein Code -Stück ausgeführt wird. Wenn beispielsweise die Fork -Anweisung dreimal geschrieben wurde, wird der Code 2^3 = 8 Mal ausgeführt. Unten finden Sie den Ausschnitt des aktualisierten C -Code für einen Fork -Systemaufruf.

#enthalten
#enthalten
#enthalten
int main ()
printf ("vor der Gabelmethode.\N");
int i = 0;
Gabel();
Gabel();
Gabel();
printf ("Kinderprozess erstellt: [%d] \ n", i);
i ++;
Rückkehr 0;

Im obigen Code gibt es drei Fork -Anweisungen, und vor ihnen haben wir eine variable "i" des Ganzzahltyps deklariert, mit dem der Prozess jeder Fork -Anweisung erstellt wird. Diese Variable wird auch nach jeder Fork -Anweisung und vor der Return -Anweisung erhöht. Da der Code geändert wurde, werden wir ihn mit dem GCC -Compiler neu kompilieren. Die Ausgabedatei wird erfolgreich generiert.

Wie Sie sehen können, wurde die Variable „I“ in keiner Weise erhöht, da auf die Fork -Anweisung sofort eine Druckanweisung folgt, die achtmal druckt, was bedeutet, dass jede Fork -Anweisung einen Prozess enthält, der den oben genannten Code gleichzeitig ausführt und nur verwendet und nur verwendet Eine Kopie des Programms, die verhindern, dass ein Inkrement im Code stattfindet. Es gibt insgesamt acht separate Druckmethoden, um die folgende Nachricht zu drucken. Wie Sie sehen können, gibt es kein Inkrement. Weil der Kinderprozess nur einen Druckbefehl ausführt.

Abschluss

Hier ging es darum, den C "Fork" -Systemanruf zu verwenden. Wir haben verschiedene Illustrationen ausprobiert, um unterschiedliche Ausgänge zu erhalten, und verschiedene Methoden wurden angewendet. Wenn Sie den Call "Fork" -System in C "Fork" in vollem Umfang im Griff haben möchten, versuchen Sie die beiden oben genannten Beispiele auf verschiedene Weise an Ihrem Ende implementieren, und Sie können loslegen, und Sie können loslegen.