Benutzung des Befehls: execvp()



  • Hey Leute
    Ich hab folgendes Problem: Ich will mit dem Befehl 'execvp' das Programm wget mit verschiedenen Parametern ansteuern. So mein Lösungsansatz:

    char *argv[]={"--load-cookies cookies", "--save-cookies cookies", "--keep-session-cookies", "www.google.de"};
    execvp("wget", argv);
    

    Wenn ich das Programm jetzt starte (arbeite mit Ubuntu Linux) kommt:

    --load-cookies cookies: unrecognized option '--save-cookies cookies'
    Syntax: --load-cookies cookies [OPTION]... [URL]...

    »--load-cookies cookies --help« gibt weitere Informationen.

    Ich verstehe nicht warum das hier nicht funktioniert und im Terminal das hier...

    wget --load-cookies cookies --save-cookies cookies --keep-session-cookies www.google.de

    ... schon funktioniert 😕
    Oder kennt jemand von euch eine Klasse mit der ich in C++ http Anfragen erstellen kann? 🙄
    Google wolllte mich auch nicht helfen? 😞

    Wäre dankbar für Hilfe 😉



  • die Argumente zu den Flags sind jeweils ein neuer Array Eintrag. Die musst du also auch noch trennen.

    was du momentan machst ist das:

    wget "--load-cookies cookies" "--save-cookies cookies" "--keep-session-cookies" "www.google.de"
    


  • Achso 😃
    werds gleich ausprobieren! Danke! 👍
    Edit: Ok es funktioniert! Aber:
    Nur wenn den ersten Parameter so setze:

    char *argv[]={[b]"",[/b]"--load-cookies","cookies", "--save-cookies","cookies", "--keep-session-cookies", "www.google.de"};
    

    Außerdem stört mich dann bei der Ausgabe:

    --2009-11-22 20:11:08-- http://www.google.de/
    Auflösen des Hostnamen »www.google.de«.... 74.125.39.103, 74.125.39.99, 74.125.39.105, ...
    Verbindungsaufbau zu www.google.de|74.125.39.103|:80... verbunden.
    HTTP Anforderung gesendet, warte auf Antwort... 200 OK
    Länge: nicht spezifiziert [text/html]
    In »index.html« speichern.

    [ <=> ] 6.013 --.-K/s in 0,02s

    2009-11-22 20:11:08 (314 KB/s) - »index.html« gespeichert [6013]

    **--2009-11-22 20:11:08-- http://%7C%FD%13/
    Auflösen des Hostnamen »|\375\023«.... fehlgeschlagen: Name or service not known.
    : kann die Host-Adresse »|�« nicht auflösen
    **
    BEENDET --2009-11-22 20:11:08--
    Geholt: 1 Dateien, 5,9K in 0,02s (314 KB/s)

    Ich sag schonmal danke 🙄



  • Schauen wir doch mal, was in der Dokumentation steht man: execvp.

    [...] The first argument, by convention, should point to
    the filename associated with the file being executed. The array of
    pointers must be terminated by a NULL pointer.

    =>

    char *argv[]={"wget","--load-cookies","cookies", "--save-cookies","cookies", "--keep-session-cookies", "www.google.de", 0x0};
    

    🙄

    Außerdem gehört das Thema in das Linux-Forum, da execvp kein Teil des ISO-Standards ist!



  • Oh 🙄 wusste ich nicht!
    Trotzdem danke 👍 👍



  • #include <iostream>
    #include <stdio.h>
    using namespace std;
    int main(void){
    char* arg[]={"","www.google.de",0x0};
    execvp("wget",arg); //bis hier her und nicht weiter 
    getchar();
    return 0;
    }
    

    Kann mir mal jemand erklären warum mein Programm an dieser Stelle endet? Es passiert nur wenn ich wget mit execvp aufrufe; nachdem er wget ausgeführt hat endet mein Programm 😕 😕 😕
    Bin echt ratlos 😞 😞

    Hilfe!! ^^



  • exec ersetzt den laufenden Prozess durch den aufgerufenen. Dein Programm "endet" also nichtmal richtig, und wenn, dann *beim* Aufruf von wget, nicht danach.
    Bitte einfach mal die manpage lesen, da steht sowas drin. Erster Satz.



  • Bashar schrieb:

    exec ersetzt den laufenden Prozess durch den aufgerufenen. Dein Programm "endet" also nichtmal richtig, und wenn, dann *beim* Aufruf von wget, nicht danach.
    Bitte einfach mal die manpage lesen, da steht sowas drin. Erster Satz.

    Doch wget wird ganz ausgeführt , seh ich an der Ausgabei und der Datei die gespeichert wird! Danach ist das Programm einfach zu Ende 😕



  • wget ist doch nicht dein Programm. Und jetzt RTFM.



  • Hab sie schon gelesen... Aber hilft mir auch nicht weiter... 🙄



  • Willst du nicht lieber die Funktion "system" benutzen?
    Du scheinst die exec-Funktionen nicht verstanden zu haben... alles was nach deinem exec-Aufruf ist, wird NICHT mehr ausgeführt!!!



  • achso 🙄
    Nein system will ich nicht benutzen, gibt es noch eine andere Möglichkeit?



  • fork und dann execvp



  • Bashar schrieb:

    fork und dann execvp

    Danke Bashar 😃 😃 Hat mir echt geholfen :xmas1:


Anmelden zum Antworten