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?