Wie lese ich die Ergebnisse eines system () -Aufrufs in C ++?

Ich verwende den folgenden Code, um zu versuchen, die Ergebnisse eines @ zu lesedf Befehl unter Linux mitpopen.

#include <iostream> // file and std I/O functions

int main(int argc, char** argv) {
    FILE* fp;
    char * buffer;
    long bufSize;
    size_t ret_code;

    fp = popen("df", "r");
    if(fp == NULL) { // head off errors reading the results
        std::cerr << "Could not execute command: df" << std::endl;
        exit(1);
    }

    // get the size of the results
    fseek(fp, 0, SEEK_END);
    bufSize = ftell(fp);
    rewind(fp);

    // allocate the memory to contain the results
    buffer = (char*)malloc( sizeof(char) * bufSize );
    if(buffer == NULL) {
        std::cerr << "Memory error." << std::endl;
        exit(2);
    }

    // read the results into the buffer
    ret_code = fread(buffer, 1, sizeof(buffer), fp);
    if(ret_code != bufSize) {
        std::cerr << "Error reading output." << std::endl;
        exit(3);
    }

    // print the results
    std::cout << buffer << std::endl;

    // clean up
    pclose(fp);
    free(buffer);
    return (EXIT_SUCCESS);
}

Dieser Code gibt mir einen "Speicherfehler" mit dem Beendigungsstatus "2", sodass ich @ sehen kanw es scheitert, ich verstehe nur nichtWaru.

Ich habe dies aus dem Beispielcode zusammengestellt, den ich auf @ gefunden habUbuntu Forums und C ++ Referenz, damit bin ich nicht verheiratet. Wenn jemand eine bessere Methode zum Lesen der Ergebnisse eines system () - Aufrufs vorschlagen kann, bin ich offen für neue Ideen.

EDIT zum Original: In Ordnung,bufSize wird negativ und jetzt verstehe ich warum. Du kannst nicht zufällig auf eine Pipe zugreifen, wie ich es naiv versucht habe.

Ich kann nicht die erste Person sein, die das versucht. Kann mir jemand ein Beispiel geben (oder zeigen), wie man die Ergebnisse eines system () - Aufrufs in eine Variable in C ++ liest?

Antworten auf die Frage(18)

Ihre Antwort auf die Frage