2009-09-28 10 views

Respuesta

8

En Linux, si no está preocupado acerca de la portabilidad (C no sabe acerca de las unidades, por lo que cualquier código específico será no portables), utilice statfs():

struct statfs fsb; 

    if(statfs("/mnt", &fsb) == 0) 
    printf("device has %ld blocks, each %ld bytes\n", fsb.f_blocks, fsb.f_bsize); 
+1

lo anterior funciona si la ruta pasada a statfs es "/ mnt" – Andrew

0

Si no tiene ningún problema en el uso de herramientas externas, exec esto:

df -h | grep -i /dev/sda1

usando popen, y analizar la línea resultante con strtok.

+0

Estoy tratando de evitar hacer algo como eso. La aplicación se ejecuta en una plataforma incrustada y requeriría demasiados recursos para hacer lo anterior. – Andrew

+1

'-h' probablemente no sea necesario porque la entrada se leerá por programa. '-i' también es redundante debido a la distinción entre mayúsculas y minúsculas. Aparte de eso, una buena solución conforme a LSB (es decir, portátil). –

2

leer y analizar una serie de entrada sysfs del dispositivo. En su caso,

  1. dispositivo completo (todas las particiones y la tabla de particiones): /sys/block/sda/size
  2. partición lógica en este dispositivo: /sys/block/sda/sda1/size

El dispositivo no tiene que ser montado todavía.

Cuestiones relacionadas