Wie ermitteln Sie die Menge an Linux-System-RAM in C ++?
Schrieb ich die folgende C++ - Funktion, um programmgesteuert zu bestimmen, wie viel RAM ein system installiert hat. Es funktioniert, aber es scheint mir, dass es sollte ein einfacher Weg, dies zu tun. Kann mir jemand sagen, ob ich etwas fehlt?
getRAM()
{
FILE* stream = popen( "head -n1 /proc/meminfo", "r" );
std::ostringstream output;
int bufsize = 128;
while( !feof( stream ) && !ferror( stream ))
{
char buf[bufsize];
int bytesRead = fread( buf, 1, bufsize, stream );
output.write( buf, bytesRead );
}
std::string result = output.str();
std::string label, ram;
std::istringstream iss(result);
iss >> label;
iss >> ram;
return ram;
}
Erste, ich bin mit popen("head -n1 /proc/meminfo")
um die erste Zeile der meminfo-Datei aus dem system. Die Ausgabe dieses Befehls sieht wie
MemTotal: 775280 kB
Einmal habe ich einen Ausgang in istringstream
es ist einfach zu tokenisierung es, um auf die Informationen, die ich will. Meine Frage ist, gibt es eine einfachere Möglichkeit, Lesen Sie in der Ausgabe dieses Befehls? Gibt es ein standard C++ library-Aufruf zu Lesen in der Menge von system-RAM?
InformationsquelleAutor der Frage Bill the Lizard | 2008-12-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unter Linux können Sie mit der Funktion
sysinfo
setzt die Werte in der folgenden Struktur:Wenn Sie wollen, es zu tun, die ausschließlich die Verwendung von Funktionen in C++ (ich würde stick zu
sysinfo
), empfehle ich die Einnahme einer C++ - Ansatz mitstd::ifstream
undstd::string
:InformationsquelleAutor der Antwort Johannes Schaub - litb
Gibt es keine Notwendigkeit zu verwenden
popen()
Sie können Lesen Sie einfach die Datei selbst. Auch, wenn es die erste Zeile ist nicht, was Sie suchen, werden Sie scheitern, dahead -n1
liest nur die erste Zeile aus und wird dann beendet. Ich bin mir nicht sicher, warum Sie das mischen von C-und C++ - I/O, wie, dass; es ist völlig in Ordnung, aber Sie sollten wahrscheinlich entscheiden, gehen alle C-oder alle C++. Ich würde es vermutlich tun so etwas wie dieses:InformationsquelleAutor der Antwort Adam Rosenfield
Erinnern /proc/meminfo ist nur eine Datei. Öffnen Sie die Datei, Lesen Sie die erste Zeile, schließen Sie die Datei. Voilá!
InformationsquelleAutor der Antwort Charlie Martin
Sogar
top
(ausprocps
) analysiert/proc/meminfo
finden Sie hier.InformationsquelleAutor der Antwort Bombe