2009-09-28 18 views

Antwort

8

Unter Linux, wenn Sie über die Portabilität nicht besorgt sind (C nicht über die Laufwerke nicht kennt, so dass jeder solche spezifischen Code portierbar sein), verwenden 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

Das obige funktioniert, wenn der Pfad zu statfs ist "/ mnt" – Andrew

0

Wenn Sie kein Problem mit externen Tools haben, exec dies:

df -h | grep -i /dev/sda1

mit popen und analysieren die resultierende Linie mit strtok.

+0

Ich versuche, so etwas zu vermeiden. Die Anwendung läuft auf einer eingebetteten Plattform und würde zu viel Ressourcen benötigen, um das oben genannte zu tun. – Andrew

+1

'-h' ist hier wahrscheinlich unnötig, da die Eingabe vom Programm gelesen wird. '-i' ist auch wegen der Groß- und Kleinschreibung überflüssig. Abgesehen davon - eine gute LSB-konforme (d. H. Tragbare) Lösung. –

2

lesen und analysieren eine Zahl in sysfs-Eintrag des Geräts. In Ihrem Fall

  1. Voll Gerät (alle Partitionen und Partitionstabelle): /sys/block/sda/size
  2. Logical Partition auf diesem Gerät: /sys/block/sda/sda1/size

Das Gerät muss nicht noch montiert werden.