system befehl aus C - wie lautet er in C++?



  • Hallo,
    ich versuche aus meinem Programm einen shell befehl abzusetzen:

    char *rm_cmd;
    sprintf(rm_cmd, "rm -f %s_tmp*", file);
    system(rm_cmd);
    

    alles kompiliert einwandfrei und beim laufen gibts auch keine abstürze oder sonstwas. Nur wird der befehl nicht ausgeführt?

    Wie sollte ich das in C++ realisieren bzw. was ist mein Fehler? Gibt es evtl. eine ähnlche C++ artige Funktion?

    Danke



  • #include <sstream>
    #include <stdlib.h>
    
    std::ostringstream cmd;
    cmd << "rm -f " << file << "_tmp*";
    system(cmd.str().c_str());
    


  • testo schrieb:

    und beim laufen gibts auch keine abstürze oder sonstwas.

    Obwohl du sprintf ins Nirvana schreiben läßt? (rm_cmd ist nicht zugewiesen)

    testo schrieb:

    Wie sollte ich das in C++ realisieren bzw. was ist mein Fehler?

    In C++ solltest du es wohl leider so lösen wie Mr. N.

    testo schrieb:

    Gibt es evtl. eine ähnlche C++ artige Funktion?

    Ja, std::sprintf. Auch in C++. Nur eben nicht typsicher. Wäre sie das, so bräuchte man diesen aufblähenden, ineffizienten Stringstream-Krampf nicht.



  • und Mr. N meinte auch bestimmt:

    #include <sstream>
    #include <cstdlib>
    
    std::ostringstream cmd;
    cmd << "rm -f " << file << "_tmp*";
    std::system(cmd.str().c_str());
    

    ...



  • (D)Evil schrieb:

    und Mr. N meinte auch bestimmt:

    #include <sstream>
    #include <cstdlib>
    
    std::ostringstream cmd;
    cmd << "rm -f " << file << "_tmp*";
    std::system(cmd.str().c_str());
    

    ...

    Seit ein GCC 4.3 Snapshot kein std::memset hatte, bin ich da nicht mehr so ganz auf die std::-Varianten fixiert.



  • Nun, dann ist es halt kein ISO-C++ mehr ...



  • Naja aber das ist sowieso nur eine definition. cstdlib includiert ja stdlib.h und macht nurnoch den namespace std auf und fügt dort using blablabla ein.



  • ertret schrieb:

    Naja aber das ist sowieso nur eine definition. cstdlib includiert ja stdlib.h und macht nurnoch den namespace std auf und fügt dort using blablabla ein.

    Muss nicht sein, ist ja schön wenn dein Compiler das macht ...



  • darthdespotism schrieb:

    ertret schrieb:

    Naja aber das ist sowieso nur eine definition. cstdlib includiert ja stdlib.h und macht nurnoch den namespace std auf und fügt dort using blablabla ein.

    Muss nicht sein, ist ja schön wenn dein Compiler das macht ...

    Nun ja, ich erwarte von einem guten C++-Compiler, dass ich auch alle verfügbaren C-APIs nutzen kann, ob sie nun zum C++-Standard gehören oder nicht.



  • darthdespotism schrieb:

    Nun, dann ist es halt kein ISO-C++ mehr ...

    AFAIK gehört die C-RTL ebenfalls zum C++-Standard.


Anmelden zum Antworten