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.

AppyMouse On-Screen Trackpad und Mauszeiger für Windows Tablets
Tablet-Benutzer vermissen oft den Mauszeiger, insbesondere wenn sie die Laptops gewohnt sind. Die Touchscreen-Smartphones und -Tablets bieten viele Vo...
Mittlere Maustaste funktioniert nicht unter Windows 10
Das mittlere Maustaste hilft Ihnen beim Scrollen durch lange Webseiten und Bildschirme mit vielen Daten. Wenn das aufhört, werden Sie am Ende die Tast...
So ändern Sie die linke und rechte Maustaste auf einem Windows 10-PC
Es ist ganz normal, dass alle Computer-Maus-Geräte ergonomisch für Rechtshänder gestaltet sind. Es gibt aber auch Mausgeräte, die speziell für Linkshä...