Lassen Sie uns die Unterschiede zwischen "execl` und" system "in Unix aufschlüsseln:
`execl` (und seine Varianten)
* Zweck: `execl` ersetzt den aktuellen Vorgang durch einen neuen. Es wird direkt das angegebene Programm geladen und ausgeführt, wodurch das ursprüngliche Programm effektiv beendet wird.
* Wie es funktioniert:
* Ersatz: Der Anrufprozess wird durch den neuen Prozess ersetzt. Dies bedeutet, dass es keine Rückkehr zum ursprünglichen Programm gibt.
* Argumente: `execl` nimmt den ausführbaren Dateinamen und eine Liste von Argumenten als Parameter an. Es hat nicht die Möglichkeit, Standardeingangs-/Ausgangsumleitung zu verarbeiten.
* Beispiel:
`` `c
#include
#include
int main () {
execl ("/bin/ls", "ls", "-l", null); // Ersetzen Sie den aktuellen Prozess durch 'ls -l'
// Diese Zeile wird nicht erreicht
Rückkehr 0;
}
`` `
`system`
* Zweck: `system` führt einen Befehl als separater Prozess aus. Sie können Shell -Befehle aus Ihrem C -Programm ausführen.
* Wie es funktioniert:
* gabel und exec: `system" verwendet "gabel", um einen untergeordneten Prozess zu erstellen. Dieser untergeordnete Prozess führt dann den Befehl mit `execl` aus.
* getrennte Prozesse: Der ursprüngliche Prozess und der neu ausgeführte Befehl werden in separaten Prozessen ausgeführt. Dies bedeutet, dass der ursprüngliche Prozess nach Abschluss des Befehls fortgesetzt werden kann.
* Eingabe/Ausgabe: Die Funktion "System" bietet eine Möglichkeit, die Standardeingangs-, Ausgabe- und Fehlerumleitung über die Shell zu verwalten.
* Beispiel:
`` `c
#include
int main () {
System ("ls -l"); // 'ls -l' als separater Prozess ausführen
Rückkehr 0;
}
`` `
Schlüsselunterschiede
* Prozessersatz: `execl` ersetzt den aktuellen Prozess, während` system` einen neuen Prozess erstellt.
* return: `execl` kehrt nicht zum Anrufprogramm zurück, während" System "nach Abschluss des ausgeführten Befehls zurückgibt.
* Shell -Integration: `system 'bietet Zugriff auf die Funktionen der Shell für die Umleitung und Rohre für Befehl, während` execl` ein Programm direkt ausführt.
Wann verwenden Sie jede Funktion
* `execl`: Verwenden Sie `execl`, wenn Sie den aktuellen Vorgang durch ein anderes Programm vollständig ersetzen möchten. Es ist für Fälle geeignet, in denen das Anrufprogramm nach Beginn des neuen Programms nicht fortgesetzt werden muss.
* `system`: Verwenden Sie "System", wenn Sie einen Befehl als separater Prozess ausführen möchten und die Kontrolle über das ursprüngliche Programm behalten möchten. Es ist für Szenarien geeignet, in denen Sie Shell -Befehle ausführen oder Eingang/Ausgabe umleiten müssen.
Zusätzliche Notizen
* Es gibt andere Varianten von `execl`:` execv`, `execlp`,` execvp` usw., die sich in der Art und Weise unterscheiden, wie sie mit Argumenten und Suchpfaden umgehen.
* Sowohl `execl` als auch` system` haben Sicherheitsauswirkungen. Wenn Sie benutzerversorgte Eingaben an diese Funktionen übergeben, stellen Sie sicher, dass Sie diese Bereinigungen zur Vorbeugung potenzieller Code-Injektionsangriffe verhindern.