Systembefehl unter C++

#2978156
Lesenswert?

Hallo,
mit dieser Funktion:
1
QString myprog::exec(QString cmd) {
2

3
    FILE* pipe = popen(cmd.toStdString().c_str(), "r");
4
    if (!pipe) return "ERROR";
5

6
    char buffer[128];
7

8
    QString result = "";
9
    sleep(5);
10
    while(!feof(pipe)) {
11
        if(fgets(buffer, 128, pipe) != NULL)
12
                result.append(result);
13
    }
14
    pclose(pipe);
15
    return result;
16
}

versuche ich, die Ausgabe eines Programms auszulesen (sie funktioniert 
so nicht, das weis ich).
Das Problem ist nur, dass diese FUnktion NUR dann den stdio aus, wenn 
direkt eine Ausgabe des Programms kommt, ich muss aber warten, bis das 
Programm beendet ist. ähnlich wie ein system(); befehl, nur dass ich die 
Ausgabe in einem String brauche.. :)
Kennt einer eine Lösung oder hat eine Idee?
LG Matthias
#2979219
Lesenswert?

Oh Gott, bitte nicht. Lies die Dokumentation für QProcess, das 
funktioniert wunderbar. Diese Lösung die du da hast ist ganz ganz 
schrecklich.

Was ist denn dein Problem mit QProcess? Poste mal den Code dafür.

Und dieses sleep! Das fordert ja Probleme aller Art geradezu heraus.

Schau dir insbesondere mal an:
http://doc.qt.digia.com/qt/qprocess.html#readAllStandardOutput
http://doc.qt.digia.com/qt/qprocess.html#waitForFinished
http://doc.qt.digia.com/qt/qprocess.html#state
http://doc.qt.digia.com/qt/qprocess.html#waitForReadyRead

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren