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);
War es hilfreich?

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!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top