execvp will kommando nicht starten
-
Hallo allerseits,
Bin wiedermal einem Problem begegnet! Diesmal handelt es sich um das Kommando execvp das das starten von linux-programmen ermöglicht. Ich arbeite hierbei natürlich unter anderem mit fork().
Das Problem ist einfach dass beim Ausführen des kommandos folgende Fehlermeldung angezeigt wird
ls: cannot access : No such file or directory
Allerdings kann ich in der shell sehr wohl /bin/ls ausführen.
folgener code:execvp("/bin/ls",matrix);
Die Matrix hat eine mindestgrösse von 1 (wenn keine parameter zum Kommando angegeben wurden). Entsprechend der Anzahl von parametern wird die Grösse des Arrays geändert. Jetzt allerdings habe ich den code auf minimum verkleinert und execvp wird mit konstanten werten geladen.
Der inhalt von matrix folgendem entspricht:matrix[0] "ls" matrix[1] "-l"
Meinen Recherchen zufolge müsste dies einwandfrei funktionieren. Ich bin beim Suche auf folgenden Link gestossen, welche aber keine weitere Informationen (resp. ein Anwendungsbeispiel) erläutert:http://www4.informatik.uni-erlangen.de//Lehre/SS07/V_SOS1/Uebung/Folien/SOS1U-3-A4.pdf
Danke bereits im Voraus für die Mühe!
MfG,
-
Nabend,
bei diesen Funktionen stehen die Zeichen v, e, p fuer folgende Bedeutung:
- v: Die Parameterliste wird in Form eines Vektors angegeben
- e: Es gibt die Moeglichkeit, dem neuen Prozess ein gesondertes Environment
mitzugeben - p: Das angegebene Programm wird in den Verzeichnissen, welche in der
PATH-Umgebungsvariablen angegeben sind, gesucht und wenn moeglich
ausgefuehrt.
Letzteres bedeutet:
Die gesamte Angabe von 'file' wird auch, wie der Name es andeutet, als diejenige
Datei interpretiert, welche du ausfuehren willst. Das heisst, dass er in deinem
Falle nach dem Programm "/bin/ls" sucht und nicht das Programm "ls" im
Verzeichnis "/bin" ausfuehrt.Es genuegt also in deinem Falle, einfach "ls" als Parameter fuer 'file'
zu uebergeben. Denke bitte auch daran, dass dein Vektor von Kommandozeilen-
argumenten mit einer 0 (NULL-Pointer) abgeschlossen werden muss.gruss
v R
-
das problem ist nur die fehlende NULL im array (das, was bei dir matrix heißt). die exec-p-funktionen suchen nur dann im pfad, wenn das übergebene kommando nicht nicht mit / beginnt. verwende, wenn möglich immer die p-versionen, da du sonst pfade hardcoden musst, was nie gut ist.
-
Da hat namenlos vollkommend recht. Ich haette mir die Manpage mal nochwas
besser durchlesen sollengruss
v R
-
Super! Ich danke euch allen herzlich, hat super funktioniert!
Habe die manpage mehrmals durchgeschaut allerdings habe ich da wohl die Sache mit dem NULL-pointer übersehen. hatte vorher immer execlp benutzt, welches meiner Meinung nach viel einfacherer ist! Mir wurde gesagt ich soll execvp benutzen, da es "besser" sei, was och immer das heissen soll
Nochmals danke allerseits!