EXECV -Funktion in der C -Sprache

EXECV -Funktion in der C -Sprache

Es gibt verschiedene Möglichkeiten und Funktionen, die Prozesse aus einem Programm zu starten. Jeder von ihnen bietet dem Programmierer unterschiedliche Lösungen, je nach den Anforderungen des speziellen Falls.

Der execxx () Familie ist eine Reihe von Systemfunktionen, die in der „Unistd.H ”Kopfzeile, um einen Prozess aus einem Programm auszuführen. Mit dieser Funktionsfamilie können wir die Eingabeargumente an die ausführbare Datei senden, die sie nennt, weshalb es eine sehr nützliche Ressource für die Interaktion zwischen den Prozessen ist.

In diesem Linux -Hinweis Artikel, Sie werden alles über die erfahren execv () Funktion in der C -Sprache funktionieren. Wir werden uns die Syntax, die theoretische Beschreibung des Funktionierens, die Eingabe- und Ausgabemargente und die Art der Daten ansehen, die jeder von ihnen verarbeitet. Sie lernen auch, wie Sie die Arrays von Strings und Zeiger erstellen und verwenden, die Teil der Eingabeargumente dieser Funktionsfamilie sind und an den Anrufprozess übergeben werden.

Dann wenden wir das an, was wir in einem praktischen Beispiel gelernt haben, das die richtige Implementierung und Aufruf des execv () Funktion.

Syntax der execv () -Funktion in der C -Sprache

int execv (const char *path, char *const argv []);

Beschreibung der Funktion execv () in der C -Sprache

Der execv () Funktion führt einen Prozess aus einem anderen Prozess oder Programm aus. Diese Funktion führt die Datei oder ausführbare Datei aus, die in der angegeben ist *Weg Streit. Dieser Eintrag sollte den absoluten oder relativen Pfad der ausführbaren Datei im Zeichenfolgenformat enthalten.

Der *argv [] Argument ist eine Reihe von Zeigern auf Strings. Der erste Zeiger des Arrays sollte immer auf eine Zeichenfolge verweisen, die den Namen der ausführbaren Datei enthält, und der letzte Zeiger sollte immer null sein. Wenn execv () wird genannt, der Prozess, aus dem es aufgerufen wurde.

Wenn die Funktion erfolgreich ausgeführt wird, kehrt sie nicht zurück. Wenn es zurückgibt, liegt es daran, dass ein Fehler auftritt. Die Fehler, die diese Funktion generieren kann.

Der Fehler kann identifiziert werden, indem sein Wert aus dem abgerufen wird Errno Globale Variable. Auf die spätere Teil sehen wir einen speziellen Abschnitt, der die häufigsten Fehler dieser Funktion und deren Identifizierung erläutert.

Die Familie von execxx () Funktionen sind in der „Unistd.H ”Kopfball. Um sie zu benutzen, müssen wir sie in unsere aufnehmen “.c ”Datei wie folgt:

#enthalten

So führen Sie einen Prozess aus einem Programm mit der Funktion execv () in C -Sprache aus

In diesem Beispiel werden wir erklären, wie man die benutzt execv () Funktion zum Ausführen eines Prozesses und die Übergabe der Eingabeargumente von einem Programm an ein anderes weitergeben.

Dazu erstellen wir zwei sehr einfache Codes. Einer ist der übergeordnete Prozess, der die Funktion execv () aufruft, um den untergeordneten Prozess auszuführen. Wenn das execv () Die Funktion startet den untergeordneten Prozess, es wird mit drei Eingabeargumenten in Form einer String übergeben, die der untergeordnete Prozess auf der Shell abruft und anzeigt.

Kinderprozess

Der untergeordnete Prozess ist ein einfacher Code, der das druckt “Ich bin der Kinderprozess “ Meldung ruft die Eingabemargente ab, die vom übergeordneten Vorgang gesendet werden, und zeigt sie auf der Shell an. Hier ist der Code für den Kinderprozess:

#enthalten
#enthalten
#enthalten
int main (int argc, char *argv [])

printf ("Ich bin der Kinderprozess");
printf ("Argument 1: %s \ n", argv [1]);
printf ("Argument 2: %s \ n", argv [2]);
printf ("Argument 3: %s \ n", argv [3]);


Wir kompilieren diesen Code und speichern seine Produktion in "Dokumenten" unter dem Namen "Kind" mit dem ".Bin ”Erweiterung wie im Folgenden dargestellt:

~ $ GCC Dokumente/Kind.c -o Dokumente/Kind.Behälter


Auf diese Weise speichern wir die ausführbare Datei unter „Dokumenten“ unter „ausführbarer). Der Pfad dieser ausführbaren Datei ist das Eingabeargument, Weg, beim Anruf execv () im übergeordneten Prozess.


Elternprozess

Der übergeordnete Prozess ist derjenige, von dem wir die nennen execv () Funktion zur Ausführung des untergeordneten Prozesss. In diesem Code definieren wir eine Reihe von Zeigern auf die Zeichenfolgen, die die Eingabeargumente für den Prozess darstellen, dass der execv () Funktion öffnet sich.

In der folgenden Abbildung können Sie sehen. In diesem Fall besteht es aus 5 Zeigern und heißt arg_ptr [].

char *arg_ptr [5];


Sobald der Spitze der Zeiger definiert ist, muss jedem Zeiger eine Zeichenfolge zugewiesen werden, die das Eingabargument enthält, das wir an den untergeordneten Prozess senden.

Sie können sehen, wie Sie jeden Zeiger in der folgenden Abbildung mit seinem entsprechenden Argument im String -Format zuweisen:

arg_ptr [0] = "Kind.C";
arg_ptr [1] = "\ nhello von";
arg_ptr [2] = "prozess 2";
arg_ptr [3] = null;


Eine andere Möglichkeit, die Saiten dem Zeiger -Array zuzuweisen, besteht darin, die Saiten in lockigen Klammern zu schließen und sie mit Kommas zu trennen:

arg_ptr [] = "Kind.c, "\ nhello from", "process 2", null;


Nachdem Sie die Spitze der Zeiger für jedes Argument definiert haben, besteht der nächste Schritt darin, die anzurufen execv () Funktion, übergeben die Zeichenfolge, die den absoluten oder relativen Pfad der ausführbaren Datei als erstes Argument und das Array der Zeichenfolgen enthält arg_ptr []als zweites Argument.

Sie können das vollständige „Haupt“ des übergeordneten Prozesss in der folgenden Abbildung sehen:

#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
int main ()
printf ("\ n \ ni am übergegebenen Prozess \ n");
char *arg_ptr [5];
arg_ptr [0] = "Kind.C";
arg_ptr [1] = "\ nhello von";
arg_ptr [2] = "prozess 2";
arg_ptr [3] = null;
execv ("/home/linuxhint/child.bin ", arg_ptr);


Wir kompilieren diesen Code, der den Pfad der “angibt“.c ”Datei und der Name des Outs.

~ $ GCC Dokumente/Elternteil.C -O -Muster


Dann führen wir die Ausgabe aus.

~ $ ./ Muster


Der übergeordnete Prozess zeigt die an "Ich bin der übergeordnete Prozess" Nachricht, das String -Array erstellt, indem ein Zeichenfolge für jedes Eingabargument zugewiesen wird, das an den nächsten Prozess übergeben wird, und die aufgerufen execv () Funktion. Wenn der execv () Funktion wird erfolgreich ausgeführt, das Kind.Die ausführbare Datei ersetzt den übergeordneten Prozess und übernimmt seine ID und den zugewiesenen Speicher, sodass diese Aktion nicht rückgängig gemacht werden kann.

Der Kinderprozess zeigt die an "Ich bin der Kinderprozess" Nachricht und ruft jedes der Eingabemarions ab, die vom übergeordneten Prozess übergeben werden, um auf der Befehlskonsole anzuzeigen.

So erkennen Sie mögliche Fehler bei der Verwendung der Funktion execv ()

Der execv () Die Funktion kehrt nicht zurück, wenn sie erfolgreich ausgeführt wird. Wenn es zu dem Code zurückkehrt, der ihn aufgerufen hat, ist ein Fehler aufgetreten. Die Fehler, die durch diese Funktion generiert werden können.

Der Weg, um den Fehler zu identifizieren, ist durch die Errno Globale Variable. Diese Variable ist eine Ganzzahl und ist im „Errno definiert.H ”Kopfball. Jedes Mal, wenn ein Fehler auftritt, wird ein numerischer Wert, der einen bestimmten Fehler darstellt, darin gespeichert.

Als nächstes betrachten wir die Definitionen und den repräsentativen Wert der möglichen Fehler, die bei der Verwendung dieser Funktion auftreten können:


Wir erzeugen einen Fehler in der Patern.C-Code, der einen nicht existierenden Dateipfad zur execv () Funktion. Verwenden Sie dann die FRINGF -Funktion, um den Fehlercode anzuzeigen, der aus dem erhalten wird Errno Variable in der Konsole:

#enthalten
#enthalten
#enthalten
#enthalten
#enthalten
int main ()
printf ("\ n \ ni am übergegebenen Prozess \ n");
char *arg_ptr [5];
arg_ptr [0] = "Kind.C";
arg_ptr [1] = "\ nhello von";
arg_ptr [2] = "prozess 2";
arg_ptr [3] = null;
execv ("/home/linuxhint/nicht existent.bin ", arg_ptr);
printf ("Fehler: %i \ n", errno);


Wie wir in der folgenden Abbildung sehen können, konnte die Funktion execv () die Datei nicht mit dem angegebenen Pfad finden und kehrt daher zum übergeordneten Prozess mit dem Wert 2 in der Erno -Variablen zurück, die der „dem“ entspricht “Keine solche Datei oder Verzeichnis" Fehler.

Abschluss

In diesem Linux -Hinweis Artikel, wir haben erklärt, wie man das benutzt execv () Funktionen in der C -Sprache, um einen Prozess aus einem anderen Prozess zu starten. Wir haben den theoretischen Betrieb von erklärt execv () und zeigten, wie die Eingabeargumente deklariert werden können.

Wir haben dann das, was wir in einem Beispiel gelernt haben. Außerdem haben wir einen speziellen Abschnitt gesehen, in dem wir die häufigsten Fehler dieser Funktion zeigen und wie man sie mithilfe der Errno -Variablen identifiziert.

Wir hoffen, dass dieser Artikel für Sie nützlich ist. Weitere Artikel über die C -Sprache und Linux -Tipps finden Sie die Suchmaschine auf unserer Website.