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 sollen 😉

    gruss
    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!

    👍 👍


Anmelden zum Antworten