Rückgabewert von Funktion system() weiterverarbeiten



  • Hallo C++Community,

    ich möchte mich in C/C++ einarbeiten, und habe folgendes Problem:

    Ich möchte gerne einen ping in einer Schleife laufen lassen,
    wenn dieser nicht ordnungsmäß abgeschlossen wurde dann soll
    die Schleife verlassen werden.

    Wie kann ich den Rückgabewert nun weiterverarbeiten, wenn
    der SYSTEM-Befehl mit einem String übergeben wurde.

    Vielen Dank

    Jochen

    Ich habe nun folgendes geschrieben:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
            int systemecho=1;
            char host[100]={"192.168.100.1"};       //Host bzw. IP-Adresse
            char syscmd[20]={"ping -c 2"};          //Basisbefehl
            strcat(syscmd, " ");                    //Leerzeichen zum String "SYSCMD" hinzufügen
            strcat(syscmd, host);                   //Strings zusammenfügen
            strcat(syscmd, " &>/dev/null");         // dev/null hinzufügen
            //system(syscmd);
                            while(systemecho == 0)
                            {
                            system(syscmd,systemecho);
                            sleep(60);
                            }
    
            printf("ENDE\n");
    return 0;
    }
    


  • Erstens: system() hat nur einen Parameter - und wie man den Rückgabewert einer Funktion entgegennimmt, gehört eigentlich zu den C-Grundkenntnissen: systemecho=system(syscmd);

    Zweitens: Bist du sicher, daß das Array 'syscmd' groß genug ist für das komplette Kommando? Wenn ich mich nicht verzählt habe, benötigst du mindestens 38 Zeichen Platz (inklusive \0).



  • Hallo CStoll,

    ich danke Dir das (systemecho=system(syscmd); ) hab ich total übersehen.
    Das mit Array hast auch recht, ist untergegangen ....

    ...aber jeder Anfang ist schwer ...

    Vielen Dank

    Jochen



  • Nur um vollständig zu sein den richtigen und funktionierenden Quelltext:

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
            int systemecho=0;
            char host[100]={"192.168.100.1"};       //Host bzw. IP-Adresse
            char syscmd[50]={"ping -c 2"};          //Basisbefehl
            strcat(syscmd, " ");                    //Leerzeichen zum String "SYSCMD" hinzufügen
            strcat(syscmd, host);                   //Strings zusammenfügen
            strcat(syscmd, " &>/dev/null");         // dev/null hinzufügen
                            while(systemecho == 0)
                            {
                            systemecho=system(syscmd);
                            //printf("Rueckgabewert: %d\n",systemecho);
                            sleep(3);
                            }
    
            printf("ENDE\n");
    return 0;
    }
    

    ...und es wird mit Sicherheit auch noch andere Lösungen geben ....

    Danke nochmals ...



  • JST schrieb:

    ...und es wird mit Sicherheit auch noch andere Lösungen geben ....

    Ja, etwa ein Dutzend systemspezifische Funktionen, die technisch das selbe leisten wie system(), aber teilweise etwas besser konfiguriert werden können (z.B. popen(), exec() oder CreateProcess()).


Anmelden zum Antworten