2009-09-28 11 views

Odpowiedz

8

W systemie Linux, jeśli nie martwisz się o przenośności (C nie wiedzieć o dyskach, więc każdy taki specyficzny kod będzie nieprzenośne), użyj 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

powyższe działa, jeśli ścieżka przekazana do statfs to "/ mnt" – Andrew

0

Jeśli nie masz problemu przy użyciu zewnętrznych narzędzi, exec to:

df -h | grep -i /dev/sda1

użyciu popen i zanalizować wiersz wynikowy z strtok.

+0

Próbuję uniknąć robienia czegoś takiego. Aplikacja działa na osadzonej platformie i wymagałaby zbyt dużej ilości zasobów, aby wykonać powyższe czynności. – Andrew

+1

'-h' jest prawdopodobnie niepotrzebne, ponieważ dane wejściowe będą odczytywane przez program. '-i' jest także nadmiarowe ze względu na rozróżnianie wielkości liter. Poza tym - dobre rozwiązanie zgodne z LSB (tj. Przenośne). –

2

przeczytać i przeanalizować liczbę w wpis urządzenia sysfs. W twoim przypadku,

  1. Pełna urządzenia (wszystkich partycji i tablicy partycji): /sys/block/sda/size
  2. partycja logiczna na tym urządzeniu: /sys/block/sda/sda1/size

Urządzenie nie musi być jeszcze montowane.

Powiązane problemy