C-Programmierung

Exec-Systemaufruf in C

Exec-Systemaufruf in 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 lasst uns anfangen.

C-Systemfunktionen in der Exec-Familie:

Die exec-Funktionsfamilien sind im Header definiert defined unistd.ha. 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:

Mal sehen, was jede dieser Funktionen macht und wie man sie verwendet.

excl() Systemfunktion:

In execl() nimmt die Systemfunktion den Pfad der ausführbaren Binärdatei (i.e. /bin/ls) als erstes und zweites Argument. Dann sind die Argumente (i.e. -lh, /Zuhause), 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. Ansonsten gibt es nichts zurück.

Syntax:

int execl(const char *path, const char *arg,… , NULL);

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

#einschließen
 
int main(void)
char *binaryPath = "/bin/ls";
char *arg1 = "-lh";
char *arg2 = "/home";
 
execl(binaryPath, binaryPath, arg1, arg2, NULL);
 
0 zurückgeben;

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

execlp() Systemfunktion:

execl() verwendet nicht die PFAD 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:

int execlp(const char *file, const char *arg,…, NULL);

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

#einschließen
 
int main(void)
char *Programmname = "ls";
char *arg1 = "-lh";
char *arg2 = "/home";
 
execlp(programmname, programmname, arg1, arg2, NULL);
 
0 zurückgeben;

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

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:

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

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

#einschließen
 
int main(void)
char *binaryPath = "/bin/ls";
char *args[] = binaryPath, "-lh", "/home", NULL;
 
execv(binaryPath, args);
 
0 zurückgeben;

Wie Sie sehen, erhalte ich die richtige Ausgabe.

execvp() Systemfunktion:

Funktioniert genauso wie die Systemfunktion execv(). Die Umgebungsvariable PATH wird jedoch verwendet. Daher ist der vollständige Pfad der ausführbaren Datei nicht erforderlich, genau wie in execlp().

Syntax:

int execvp(const char *file, char *const argv[]);

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

#einschließen
 
int main(void)
char *Programmname = "ls";
char *args[] = Programmname, "-lh", "/home", NULL;
 
execvp(Programmname, Argumente);
 
0 zurückgeben;

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:

int execle(const char *path, const char *arg,… , NULL, char * const envp[] );

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

#einschließen
 
int main(void)
char *binaryPath = "/bin/bash";
char *arg1 = "-c";
char *arg2 = "echo "Besuche $HOSTNAME:$PORT in deinem Browser."";
char *const env[] = "HOSTNAME=www.linuxhint.com", "PORT=8080", NULL;
 
execle(binaryPath, binaryPath,arg1, arg2, NULL, env);
 
0 zurückgeben;

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 Ihre eigenen Umgebungsvariablen zusammen mit execve() bereitstellen. Sie können Argumente auch als Arrays übergeben, wie Sie es in execv() getan haben.

Syntax:

int execve(const char *file, char *const argv[], char *const envp[]);

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

#einschließen
 
int main(void)
char *binaryPath = "/bin/bash";
char *const args[] = binaryPath, "-c", "echo "Besuche $HOSTNAME:$PORT
von deinem Browser."", NULL;
char *const env[] = "HOSTNAME=www.linuxhint.com", "PORT=8080", NULL;
 
execve(binaryPath, args, env);
 
0 zurückgeben;

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

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

HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...
So verwenden Sie AutoKey zur Automatisierung von Linux-Spielen
AutoKey ist ein Desktop-Automatisierungsdienstprogramm für Linux und X11, programmiert in Python 3, GTK und Qt. Mithilfe der Skript- und MACRO-Funktio...
So zeigen Sie den FPS-Zähler in Linux-Spielen an
Linux-Gaming bekam einen großen Schub, als Valve 2012 die Linux-Unterstützung für den Steam-Client und seine Spiele ankündigte. Seitdem haben viele AA...