Acabo de escribir la siguiente función C++ para determinar programáticamente cuánta RAM ha instalado un sistema. Funciona, pero me parece que debería haber una forma más simple de hacerlo. ¿Puede alguien decirme si me estoy perdiendo algo?¿Cómo se determina la cantidad de RAM del sistema Linux en C++?
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;
}
En primer lugar, estoy usando popen("head -n1 /proc/meminfo")
para conseguir la primera línea del archivo meminfo del sistema. La salida de ese comando se parece
MemTotal: 775280 kB
Una vez que tengo que la producción en un istringstream
, es fácil de tokenize que para llegar a la información que quiero. Mi pregunta es, ¿hay alguna manera más simple de leer en la salida de este comando? ¿Hay una llamada estándar de biblioteca C++ para leer en la cantidad de RAM del sistema?
sysinfo funciona perfectamente. Gracias. –
es posible que desee cerrar el identificador del archivo después de leer – segfault
Seguramente los destructores ya lo hacen. –