Wie kann ich Lesen Sie die Ergebnisse der system () - Aufruf in C++?

Ich bin mit dem folgenden code zu versuchen, Lesen Sie die Ergebnisse einer df Befehl in Linux mit popen.

#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 ein "Memory Fehler" mit einem exit-status '2', so kann ich sehen wo es fehlschlägt, ich verstehe einfach nicht warum.

Lege ich diese zusammen aus der Beispiel-code den ich gefunden habe auf Ubuntu-Foren und C++ - Referenz, also ich bin nicht verheiratet. Wenn jemand vorschlagen kann, einen besseren Weg, um Lesen Sie die Ergebnisse der system () - Aufruf, ich bin offen für neue Ideen.

BEARBEITEN, um das original: Okay, bufSize wird, kommen negative, und jetzt verstehe ich, warum. Sie können nicht zufällig Zugriff auf ein Rohr, wie ich naiverweise versucht, das zu tun.

Kann ich nicht die erste person, um zu versuchen, dies zu tun. Kann jemand (oder zeigen Sie mir ein Beispiel dafür zu Lesen, die Ergebnisse von einem system () - Aufruf in eine variable in C++?

'System call' hat eine sehr spezifische Bedeutung, siehe <en.wikipedia.org/wiki/System_call>. Was Sie zu tun versuchen zu erfassen, die Ausgabe von einem anderen Programm (ich bin nicht sicher, was der technische Begriff für diese ist aus der Spitze von meinem Kopf).
Danke. Ich bearbeitet die Frage, um zu versuchen und zu klären.

InformationsquelleAutor Bill the Lizard | 2008-11-21

Schreibe einen Kommentar