system(wget ....) - Problem



  • Hallo,

    Ich bin gerade dabei ein kleines Programm zu schreiben, welches unter anderen Webseiten holt und in einer Datei ablegt. Dazu habe ich folgede Funktion geschrieben:

    int fetchSite(char *pUrl, char *pOutFileName)
       {
       int RetVal = 0;
       char getCommand[2048];
    
       /*sprintf(getCommand, "./fetch.sh %s %s", pOutFileName, pUrl);*/
       sprintf(getCommand, "wget -q -O %s %s", pOutFileName, pUrl);
    
       if (system(NULL))  // shell available
          {
          RetVal = system(getCommand);
          if (!quiet)
             {
             printLine("fetchSite %d %d", RetVal, WEXITSTATUS(RetVal));
             }
          }
       else
          {
          RetVal = -1;
          }
       return RetVal;
       }
    

    Nun habe ich folgendes Problem: Als Returnwert von system(wget ...) bekomme ich immer 0 zurück. auch WEXITSTATUS(system(wget....) ist immer 0. egal ob die Webseite geholt werden konnte oder nicht. Es scheint so als ob der Exit-Status von wget nicht weitergegeben wiord oder noch nicht zur Verfügung steht, da die Webseiten im Falle einer Verbindung zum Internet erst nach und nach eintrudeln. wenn mein Programm schön längst fertig ist.

    Ich habe auch schon probiert wget aus eine Shell-Script heraus aufzurufen, welches, dann den Exit-Status korrekt anzeigt und dann auch selbst mit diesem Status exited. Leider zeigt mein C Programm welches, dann dieses Shell-Script aufruft wieder immer nur 0 an (also auch im Negativfall, wo das Shell-Skript richtigerweise 4 ausgibt).

    Hat jemand eine Idee was ich falsch mache bzw. wie ich es besser machen könnte?

    LG



  • Statt Marke Eigenbau empfehle ich dir die Verwendung der libcurl, die hat für deinen Anwendungsfall alles Notwendige.



  • Danke für den Tipp! Ich werde mir die lib mal anschauen! Trotzdem wäre eine Erklärung super, damit ich auch verstehe was hier schiefläuft.

    LG



  • Gemäß ANSI C Spezifikation liefert system NICHT den Rückgabewert des aufgerufenen Programms, auch ist es für system uninteressant, ob du synchrone oder asynchrone Aufrufe machst. Der system-Rückgabewert ist also praktisch kaum zu gebrauchen.


Anmelden zum Antworten