[C/C++] Win.cmd emulieren?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Golly, 8. Juni 2008 .

Schlagworte:
  1. 8. Juni 2008
    Win.cmd emulieren?

    Hi,

    ich suche nach Möglichkeiten die "cmd.exe" von Windows zu "emulieren"...

    ...habe dabei an soetwas gedacht, funktioniert aber leider nicht :

    Code:
    #include <windows.h>
    #include <iostream>
    using namespace std;
    
    int main()
    {
     string input;
    
     while(1) // Wie anders machbar?
     {
     printf("$> ");
     
     scanf("%s",input);
    
     fflush(stdin); // ??? nötig ???
    
     system(input.c_str()); // ???
    
     printf("%s",system(input.c_str())); // Was würde das ausgeben, so OK?
    
     Sleep(100); // ??? nötig ???
    
     
    
     }
    
     return 0;
    }

    Sollte eigentlich klar sein wie ich mir das vorstelle.

    Vielen Dank schonmal im Vorraus!
     
  2. 9. Juni 2008
    AW: Win.cmd emulieren?

    scanf ist eine Funktion aus der C-Library, deshalb wird das einlesen mit dieser Funktion nicht funktionieren ( std::string ist eine Klasse aus C++, wovon C nichts weiß ).

    Nebenbei: Vermeide die Verwendung von scanf, scanf ist böse .

    fflush ist nur nötig, wenn noch Eingaben vom User darauf warten von deinem Programm behandelt zu werden und du diese nicht behandeln willst, bzw. diese quasi einfach löscht.

    printf im zusammenhang bin system? Wenn dann nur mit dezimale formatierung.
     
  3. 9. Juni 2008
    AW: Win.cmd emulieren?

    Also:
    die while-Schleife brauchst du gar nich...
    Machs lieber so:
    Code:
    do
    {
     // code
    } while (input != 'exit');
    wie remaL schon sagte, scanf ist böööööse Nimm dafür lieber cin:
    Code:
    cin >> input;
    Das Sleep() am Ende brauchst du nicht.

    Und mit system() führst du nur den Befehl aus, aber du kriegst keine Rückgabe. Du musst das ganze anders lösen, und das is bissl aufwendiger.

    Du brauchst dazu Pipes.. Mit denen kannst du die Ausgabe auslesen. Unter Windows musst du zuerst die cmd.exe mit CreateProcess() starten, danach kannst du mit CreatePipe() und ReadFile/WriteFile lesen bzw. schreiben. mit PeekNamedPipe() kannst du überprüfen, ob Daten zum Lesen da sind.
     
  4. 9. Juni 2008
    AW: Win.cmd emulieren?

    Habs jetzt so gemacht :

    Code:
    #include <windows.h>
    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
     string input;
    
     do 
     {
     cout << "$> " ;
     
     cin >> input;
     
     system(input.c_str());
    
     }while(input != "exit");
    
     return 0;
    }
    Genau die gleiche Idee mit der Do-While input != "exit" - Schleife hatte ich auch ! ^^

    Hab sie aber verworfen, weil ich unlösbare Fehler beim Kompilieren bekam.
    Hab jetzt <string> mit ein-includiert und jetzt gehts.

    Der Output funktioniert auch ganz gut.

    Einziges Problem stellt im Moment die übergabe von Parametern dar.

    Bei ein-parametrigen Befehlen läuft alles glatt, aber sobald man min. 1 Parameter übergibt, wie z.B. : mkdir TEST
    spuckt der "Syntaxfehler" aus, weil er anscheinend jeden weiteren Parameter als eigenen Befehl sieht und diesen dementsprechend ausführt.

    Vielen Dank für die Hilfe bis jetzt.

    Bin aber für weitere Hilfe bezüglich des "Inputs" und der Parameterübergabe offen!

    //EDIT: BW an remal raus, an Pyro läuft
     
  5. 11. Juni 2008
    AW: Win.cmd emulieren?

    ehm ich glaube das die funktion cin>> nur bis zum ersten leerzeichen alles einsammelt deswegen kommt dann auch syntaxfehler, weil quasi nur "mkdir" eingegbeen wurde! versuchs mit (bin mir gerad net sicher) input = cin.get(); oder cin.getline(); irgendwie sowas

    mfg poener
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.