Die Ausführung eines Befehls von C ++, was in argv erwartet wird [0]?
-
23-09-2019 - |
Frage
Ich bin execv()
mit Befehlen von / ist / wie 'ls' laufen, 'PWD', 'Echo' von meinem c ++ Programm, und ich frage mich, was ich Wert in argv liefern sollte [0];
const char * path = getPath();
char ** argv = getArgs();
execv(path,argv);
Lösung
argv[0]
soll der Programmname sein. Es ist auf das Programm main
Funktion übergeben. Einige Programme unterscheiden ihr Verhalten je nachdem, was Zeichenfolge argv[0]
ist. Zum Beispiel wird die GNU bash
Shell einige seiner Funktionen deaktivieren, wenn mit sh
statt bash
genannt. Bestes geben ihm den gleichen Wert, den Sie path
passieren.
Unter Linux argv[0]
ist der Prozessname des top
Dienstprogramm angezeigt (die es wahrscheinlich aus der Lektüre Einträge in /proc/
wird)
Andere Tipps
argv [0] sollte der vollständige Pfad des Befehls, dass Sie ausführen möchten.
Ich weiß, dass dies nicht die Antwort Sie suchen aber gibt es einen bestimmten Grund, warum Sie das tun? Der Grund, warum ich frage ist, dass die meisten, wenn nicht alle Aktionen Menschen in der Regel entweder mit system()
oder execv()
sind in Bibliotheken auf Windows- oder Unix verfügbar liefen und sind sicherer, schneller und weniger wahrscheinlich von umständlichen Fehlern leiden . Damit meine ich zum Beispiel, wenn die PATH
Änderungen und plötzlich Ihr Code nicht mehr funktioniert.
Wenn Sie in einem String übergeben, entweder ganz oder teilweise, und dann läuft es auch verlassen Sie sich auf einen Benutzer öffnen Zugriff auf das System zu gewinnen, indem Sie einen Befehl eingeben, der zu beschädigen könnte. Z.B. Stellen Sie sich eine Dateisuche mit find /home -name
und Ihre Benutzertypen implementiert haben in:
"%" -exec rm {} \;
Ouch!