Ich habe ein Flash-Laufwerk Gerät (/ dev/sda1) montiert auf/mnt auf einem eingebetteten Linux-System (Kernel 2.6.23). Wie verwende ich die Größe des Laufwerks?Wie finde ich die Größe des montierten USB-Sticks in C?
Antwort
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);
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.
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
'-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. –
lesen und analysieren eine Zahl in sysfs-Eintrag des Geräts. In Ihrem Fall
- Voll Gerät (alle Partitionen und Partitionstabelle):
/sys/block/sda/size
- Logical Partition auf diesem Gerät:
/sys/block/sda/sda1/size
Das Gerät muss nicht noch montiert werden.
Das obige funktioniert, wenn der Pfad zu statfs ist "/ mnt" – Andrew