Exec-Systemaufruf in C

Exec System Call C



Die exec-Familie hat viele Funktionen in C. Diese C-Funktionen werden im Wesentlichen verwendet, um einen Systembefehl in einem separaten Prozess auszuführen, der das Hauptprogramm umfasst und die Ausgabe ausgibt.

In diesem Artikel werde ich über die exec-Funktionsfamilie sprechen und Ihnen zeigen, wie Sie jede dieser exec-Familienfunktionen in C verwenden. Also, lass uns beginnen.







C-Systemfunktionen in der Exec-Familie:

Die exec-Funktionsfamilien sind im Header definiert unistd.h . Sie müssen diesen Header also in dem C-Programm verwenden, in dem Sie diese Funktionen verwenden möchten.



Die verfügbaren Exec-Funktionen mit ihren Funktionsparametern sind unten aufgeführt:



  • int execl(const char *path, const char *arg, …, NULL);
  • int execlp(const char *file, const char *arg, …, NULL);
  • int execv(const char *path, char *const argv[]);
  • int execvp(const char *file, char *const argv[]);
  • int execle(const char *path, const char *arg, …, NULL, char * const envp[] );
  • int execve(const char *file, char *const argv[], char *const envp[]);

Sehen wir uns an, was jede dieser Funktionen macht und wie man sie verwendet.





excl() Systemfunktion:

In execl() nimmt die Systemfunktion den Pfad der ausführbaren Binärdatei (d.h. /bin/ls ) als erstes und zweites Argument. Dann werden die Argumente (d.h. -lh , /Heimat ), die Sie an die ausführbare Datei übergeben möchten, gefolgt von NULL . Dann führt die Systemfunktion execl() den Befehl aus und gibt die Ausgabe aus. Wenn ein Fehler auftritt, gibt execl() -1 zurück. Andernfalls wird nichts zurückgegeben.

Syntax:

intausschließen(const verkohlen *Weg, const verkohlen *verärgert,...,NULL);

Ein Beispiel für die Systemfunktion execl() ist unten angegeben:



#enthalten

inthauptsächlich(Leere) {
verkohlen *Binärpfad= '/bin/ls';
verkohlen *arg1= '-lh';
verkohlen *arg2= '/Heimat';

ausschließen(Binärpfad,Binärpfad,arg1,arg2,NULL);

Rückkehr 0;
}

ich lief die ls -lh / home Befehl mit der Systemfunktion execl(). Wie Sie sehen, wird das richtige Ergebnis angezeigt.

execlp() Systemfunktion:

execl() verwendet nicht die WEG Umgebungsvariable. Daher ist der vollständige Pfad der ausführbaren Datei erforderlich, um sie mit execl() auszuführen. execlp() verwendet die Umgebungsvariable PATH. Wenn also eine ausführbare Datei oder ein Befehl im PATH verfügbar ist, reicht der Befehl oder der Dateiname aus, um ihn auszuführen, der vollständige Pfad wird nicht benötigt.

Syntax:

intexeclp(const verkohlen *Datei, const verkohlen *verärgert,...,NULL);

Wir können das execl()-Beispiel mit der Systemfunktion execlp() wie folgt umschreiben:

#enthalten

inthauptsächlich(Leere) {
verkohlen *Programmname= 'Is';
verkohlen *arg1= '-lh';
verkohlen *arg2= '/Heimat';

execlp(Programmname,Programmname,arg1,arg2,NULL);

Rückkehr 0;
}

Ich habe nur den Befehlsnamen übergeben ls , nicht der vollständige Pfad /bin/ls . Wie Sie sehen können, habe ich die gleiche Ausgabe wie zuvor.

execv() Systemfunktion:

In der Funktion execl() werden die Parameter der ausführbaren Datei als verschiedene Argumente an die Funktion übergeben. Mit execv() können Sie alle Parameter in einem NULL-terminierten Array übergeben argv . Das erste Element des Arrays sollte der Pfad der ausführbaren Datei sein. Andernfalls funktioniert die Funktion execv() genauso wie die Funktion execl().

Syntax:

intleitender Angestellter(const verkohlen *Weg, verkohlen *constargv[]);

Wir können das execl()-Beispiel wie folgt umschreiben:

#enthalten

inthauptsächlich(Leere) {
verkohlen *Binärpfad= '/bin/ls';
verkohlen *args[] = {Binärpfad, '-lh', '/Heimat',NULL};

leitender Angestellter(Binärpfad,args);

Rückkehr 0;
}

Wie Sie sehen, erhalte ich die richtige Ausgabe.

execvp() Systemfunktion:

Funktioniert genauso wie die Systemfunktion execv(). Es wird jedoch die Umgebungsvariable PATH verwendet. Der vollständige Pfad der ausführbaren Datei ist also nicht wie bei execlp() erforderlich.

Syntax:

intexecvp(const verkohlen *Datei, verkohlen *constargv[]);

Wir können das execv()-Beispiel wie folgt umschreiben:

#enthalten

inthauptsächlich(Leere) {
verkohlen *Programmname= 'Is';
verkohlen *args[] = {Programmname, '-lh', '/Heimat',NULL};

execvp(Programmname,args);

Rückkehr 0;
}

Wie Sie sehen, wird die richtige Ausgabe angezeigt.

execle() Systemfunktion:

Funktioniert genauso wie execl(), aber Sie können Ihre eigenen Umgebungsvariablen mit angeben. Die Umgebungsvariablen werden als Array übergeben envp . Das letzte Element des envp Array sollte NULL sein. Alle anderen Elemente enthalten die Schlüssel-Wert-Paare als String.

Syntax:

intausführen(const verkohlen *Weg, const verkohlen *verärgert,...,NULL, verkohlen * constenvp[] );

Ein Beispiel für die Systemfunktion execle() ist unten aufgeführt:

#enthalten

inthauptsächlich(Leere) {
verkohlen *Binärpfad= '/bin/bash';
verkohlen *arg1= '-C';
verkohlen *arg2= 'rauswerfen 'Besuchen Sie $HOSTNAME:$PORT von Ihrem Browser aus.'';
verkohlen *constenv[] = {'HOSTNAME=www.linuxhint.com', 'PORT=8080',NULL};

ausführen(Binärpfad,Binärpfad,arg1,arg2,NULL,env);

Rückkehr 0;
}

Ich habe zwei Umgebungsvariablen übergeben HOSTNAME und HAFEN zur execle()-Funktion. Wie Sie sehen können, kann ich von der ausführbaren Datei darauf zugreifen /bin/bash .

execve() Systemfunktion:

Genau wie execle() können Sie zusammen mit execve() Ihre eigenen Umgebungsvariablen bereitstellen. Sie können Argumente auch als Arrays übergeben, wie Sie es in execv() getan haben.

Syntax:

intausführen(const verkohlen *Datei, verkohlen *constargv[], verkohlen *constenvp[]);

Das execle()-Beispiel kann wie folgt umgeschrieben werden:

#enthalten

inthauptsächlich(Leere) {
verkohlen *Binärpfad= '/bin/bash';
verkohlen *constargs[] = {Binärpfad, '-C', 'rauswerfen 'Besuchen Sie $HOSTNAME:$PORT
von Ihrem Browser.'',NULL};
verkohlen *constenv[] = {'HOSTNAME=www.linuxhint.com', 'PORT=8080',NULL};

ausführen(Binärpfad,args,env);

Rückkehr 0;
}

Wie Sie sehen, erhalten wir die gleiche Ausgabe wie im Beispiel von execle().

So verwenden Sie die exec-Funktionsfamilie in C für die Systemprogrammierung unter Linux. Danke, dass Sie diesen Artikel gelesen haben.