1 #include <stdio.h>
2 #include <sys/sysinfo.h>
3 #include <math.h>
4
5 int main(int argc, char **argv)
6 {
7 struct sysinfo sys_info;
8 unsigned long ram_total, ram_ocupada, ram_libre;
9
10 if(sysinfo(&sys_info) != 0){
11 perror("sysinfo fallo!!!");
12 return 1;
13 }
14 printf("********************RAM*******************\n\n");
15 // Total de ram y ram libre.
16 ram_total = sys_info.totalram * sys_info.mem_unit / pow(2,20);
17 ram_libre = sys_info.freeram * sys_info.mem_unit / pow(2, 20);
18 ram_ocupada = ram_total - ram_libre;
19
20 printf("Ram Total:\t%ld\tMb\n", ram_total);
21 printf("Ram Ocupada:\t%ld\tMb\n", ram_ocupada);
22 printf("Ram Libre:\t%ld\tMb\n", ram_libre);
23
24 //Porcentaje total de ram y ram libre
25 printf("\nRam ocupada: %2.2f%% \t Ram libre: %2.2f%%\n", (ram_ocupada * 100.0)/ram_total, (ram_libre * 100.0)/ram_total);
26
27 //Numero de procesos corriendo actualmente
28 printf("Numero de Procesos: %d\n", sys_info.procs);
29 return 0;
30 }
Un poco de la explicación del funcionamiento del programa, como
puede verse en la parte de arriba inicia con la solicitud a
las librerías lineas 1 a 3, la mas interesante es <sys/sysinfo>
que es en la que nos basaremos para obtener información del sistema, en
la linea 7 se inicializa una estructura sysinfo llamada sys_info, en la
línea 10 llenamos nuestra estructura, llamando a
la función sysinfo(&sys_info) la cual llena la estructura con la
información del sistema toma como argumento un apuntador a una
estructura sysinfo por eso vemos el &sys_info en la llamada y
devuelve un valor diferente de 0 en caso de haber ocurrido un error que
se comprueba con el if.
Bueno como nota para
entender las lineas 16 a 18, la estructura sysinfo
sufrió una modificación desde Linux 2.3.23 (i386), 2.3.48(todas las
arquitecturas), algo que se explica en el enlace que deje arriba, los
datos que regresan los campos que tienen relación con la memoria en la
estructura sysinfo están dados en múltiplos de un campo que tiene la
estructura llamado mem_unit, por este motivo para saber el tamaño real
es necesario multiplicar el campo de la memoria por mem_unit para
obtener su tamaño en bytes, y por ultimo lo dividimos yo use 2 elevada a
20 que es un Megabyte, así que mis datos quedaron en Mb.
Si
queremos saber si el programa funciona correctamente podemos compararlo
una manera sencilla es abrir una terminal y teclear el comando "free".
No hay comentarios:
Publicar un comentario