Ihre Idee mit dem Popen und Showmem ist machbar. Sie müssen das Ergebnis nur aus dem popen() analysieren, um die Speicherinformation zu extrahieren. Hier
ist ein Beispiel, vorausgesetzt, Sie sind nicht gemeinsam genutzte Objekte haben:
int main(int argc, char *argv[]) {
pid_t self;
FILE *fp;
char command[30];
const int MAX_BUFFER = 2048;
char buffer[MAX_BUFFER];
char* p;
char* delims = { " ," };
int memory[] = {-1, -1, -1, -1, -1 };
int valueindex = -1;
int parserindex = 0;
self = getpid();
sprintf(command, "showmem -P %d", self);
fp = popen(command, "r");
if (fp) {
while (!feof(fp)) {
if (fgets(buffer, MAX_BUFFER, fp) != NULL) {
p = strtok(buffer, delims);
while (p != NULL) {
if (parserindex >=8 && parserindex <= 13) {
memory[++valueindex] = atoi(p);
}
p = strtok(NULL, delims);
parserindex +=1;
}
}
}
pclose(fp);
}
printf("Memory Information:\n");
printf("Total: %i\n", memory[0]);
printf("Code: %i\n", memory[1]);
printf("Data: %i\n", memory[2]);
printf("Heap: %i\n", memory[3]);
printf("Stack: %i\n", memory[4]);
printf("Other: %i\n", memory[5]);
return EXIT_SUCCESS;
}
Dieses Programm erzeugt die folgende Ausgabe:
Memory Information:
Total: 851968
Code: 741376
Data: 24576
Heap: 73728
Stack: 12288
Other: 0
Sie könnten mit tatsächlich gestartet werden soll das Zuweisen von Speicher für die Zeichenfolge des Befehls, so haben Sie nicht * undefined Verhalten * mit dem nicht initialisierten Zeiger 'Befehl'. Ein Array wäre eine gute Idee. –
Was Ihr Problem anbetrifft, die Ausgabe des Befehls zu analysieren, könnte es eine gute Idee sein, [über die 'popen' Funktion zu lesen] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/popen.html) . Sobald Sie das getan haben, sollten Sie hoffentlich wissen, wie man die Befehlsausgabe liest. Und wie können wir helfen, wenn wir unsere Hilfe fragen, wenn wir nicht wirklich wissen, wie die Ausgabe aussieht? –
Ich konnte den Speicher mit fscanf abrufen – Bionix1441