SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Locoarts3113 en Domingo 24 de Octubre de 2010, 00:17

Título: Sacar memoria y disco libre - Linux
Publicado por: Locoarts3113 en Domingo 24 de Octubre de 2010, 00:17
Hola gente,

estoy trabajndo en C y necesitaria SOLAMENTE obtener los datos de la memoria  y disco libre que tengo en el sistema operativo DEBIAN (linux).
La verdad estuve buscando un monton en internet y no encontre nada al respecto...espero de su gran ayuda!!
Estuve viendo la funcion getrusage pero no la entendi ni un poco.

GRACIAS
Título: Re: Obtener memoria y disco libre
Publicado por: m0skit0 en Domingo 24 de Octubre de 2010, 20:18
El fichero /proc/meminfo tiene la información sobre la memoria. Sólo tienes que buscar la que te interesa (un parseo muy sencillo).

Para el espacio en disco, statvfs() (mira la página del manual).
Título: Re: Obtener memoria y disco libre
Publicado por: Locoarts3113 en Lunes 25 de Octubre de 2010, 01:55
Cita de: "m0skit0"
El fichero /proc/meminfo tiene la información sobre la memoria. Sólo tienes que buscar la que te interesa (un parseo muy sencillo).

Para el espacio en disco, statvfs() (mira la página del manual).

No me dejan utilizar parseo para obtener los datos, tengo que usar alguna funcion u otra cosa..

Gracias igual
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: m0skit0 en Lunes 25 de Octubre de 2010, 09:08
Cita de: "Locoarts3113"
No me dejan utilizar parseo para obtener los datos, tengo que usar alguna funcion u otra cosa..
Como te digo, para el espacio en disco, tienes statvfs. Que yo sepa no hay ninguna llamada al sistema que te devuelva la memoria libre en todo el sistema, así que tendrás que usar otro mecanismo (como mirar en /proc/meminfo, o llamar a utilidades como free o vmstat a través de system() -que al fin y al cabo lo que hacen estas utilidades es mirar en /proc/meminfo-. Y no veo por qué no puedes mirar en /proc/meminfo puesto que para eso está  <_<

También existen formas más cutres como intentar reservar memoria cada vez más grande hasta que el sistema devuelva error (en un bucle). Esto es una solución muchísimo peor.
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: Locoarts3113 en Lunes 25 de Octubre de 2010, 16:15
Cita de: "m0skit0"
Cita de: "Locoarts3113"
No me dejan utilizar parseo para obtener los datos, tengo que usar alguna funcion u otra cosa..
Como te digo, para el espacio en disco, tienes statvfs. Que yo sepa no hay ninguna llamada al sistema que te devuelva la memoria libre en todo el sistema, así que tendrás que usar otro mecanismo (como mirar en /proc/meminfo, o llamar a utilidades como free o vmstat a través de system() -que al fin y al cabo lo que hacen estas utilidades es mirar en /proc/meminfo-. Y no veo por qué no puedes mirar en /proc/meminfo puesto que para eso está  <_<

También existen formas más cutres como intentar reservar memoria cada vez más grande hasta que el sistema devuelva error (en un bucle). Esto es una solución muchísimo peor.

Lo que yo necesito hacer es un programa en C que me devuelva la memoria libre en ese momento. Ejemplo:

int main() {
...
funcion_memoria_libre()
..}

y que me devuelva ponele: 512mb


GRACIAS
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: m0skit0 en Lunes 25 de Octubre de 2010, 16:20
Ya te entendí y como te digo que yo sepa, no hay dicha función. Te creas tu función y haces el parseo dentro.

Código: C
  1. funcion_memoria_libre()
  2. {
  3.      //Mira dentro de /proc/meminfo
  4. }
  5.  
Como te digo, que yo sepa Linux (y POSIX) no tienen una llamada de ese tipo. A lo mejor otro te puede ayudar.
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: Locoarts3113 en Lunes 25 de Octubre de 2010, 17:09
Cita de: "m0skit0"
Ya te entendí y como te digo que yo sepa, no hay dicha función. Te creas tu función y haces el parseo dentro.

Código: C
  1. funcion_memoria_libre()
  2. {
  3.      //Mira dentro de /proc/meminfo
  4. }
  5.  
Como te digo, que yo sepa Linux (y POSIX) no tienen una llamada de ese tipo. A lo mejor otro te puede ayudar.

Me falta alguna llamada al sistema que me devuelva SOLAMENTE el espacio en disco libre...
Graciaas,  ya se como hacer lo de la memoria libre:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
int system(const char* command);
system("vmstat 1 2 | sed -n '$ p' | awk '{print $4}'");
}

Saluuudos!!
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: m0skit0 en Lunes 25 de Octubre de 2010, 17:31
Yo no sé si realmente lees lo que te pongo, así que ésta es la última vez que te respondo:

Cita de: "Locoarts3113"
system("vmstat 1 2 | sed -n '$ p' | awk '{print $4}'");
Cita de: "m0skit0"
llamar a utilidades como free o vmstat a través de system() -que al fin y al cabo lo que hacen estas utilidades es mirar en /proc/meminfo-

Cita de: "Locoarts3113"
Me falta alguna llamada al sistema que me devuelva SOLAMENTE el espacio en disco libre...
Cita de: "m0skit0"
Para el espacio en disco, statvfs() (mira la página del manual).
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: Locoarts3113 en Lunes 25 de Octubre de 2010, 17:32
Cita de: "m0skit0"
Yo no sé si realmente lees lo que te pongo, así que ésta es la última vez que te respondo:

Cita de: "Locoarts3113"
system("vmstat 1 2 | sed -n '$ p' | awk '{print $4}'");
Cita de: "m0skit0"
llamar a utilidades como free o vmstat a través de system() -que al fin y al cabo lo que hacen estas utilidades es mirar en /proc/meminfo-

Cita de: "Locoarts3113"
Me falta alguna llamada al sistema que me devuelva SOLAMENTE el espacio en disco libre...
Cita de: "m0skit0"
Para el espacio en disco, statvfs() (mira la página del manual).

SOLUCIONADOOO, GRACIAS A TODOS
Título: Re: Sacar memoria y disco libre - Linux
Publicado por: Geo en Martes 26 de Octubre de 2010, 17:18
Para el caso de la memoria libre, yo uso free para tomar en cuenta la que está siendo usada para caché.