2012-07-20 111 views
1

我已經編寫了一個計算硬盤大小的代碼,但由於某種原因它總是給出的尺寸小於實際大小。計算硬盤大小

就像80GB顯示爲74GB,而160GB顯示爲149GB。 漁獲在哪裏?

#include <stdio.h> 
#include <stdlib.h> 
#include <fcntl.h> 
#include <sys/stat.h> 
#include <linux/fs.h> 


int main() 
{ 

     long bytes = 0; 
     int fd = open("/dev/sdb1", O_RDONLY); 
     const unsigned long long a = (1024ULL* 1024ULL * 1024ULL); 

     int retval = ioctl(fd, BLKGETSIZE64, &bytes); 
     int hdSize = bytes/a; 

     printf(" Harddisk = %lld \n",hdSize); 

     return EXIT_SUCCESS; 
} 

回答

8

只需different Gigabyte definitions。您使用1 GB = 2 字節,許多硬盤供應商使用10字節。

例如,製造商使用後一個定義的「80 GB」磁盤將保存80,000,000,000字節,等於78,125,000 KB,76,294 MB或(如您驗證的)74.51 GB,其中所有設備均使用冪指數兩個定義。

+0

是否有任何方法可以完成並取消這種差異以便每次獲得實際大小? – kingsmasher1 2012-07-20 11:52:28

+0

@ kingsmasher1我不確定你的意思。你的代碼確實得到了正確的實際大小,只用gibibytes而不是千兆字節。 – Maxpm 2012-07-20 11:53:43

+0

unsigned long long a =(1000000000ULL); – 2012-07-20 11:54:01

0

除了千兆字節和千兆字節之間的差異之外,還有要分辨的分區的格式。

所有的元數據和目錄結構(以及日誌文件...)將竊取一些可用空間。

另一個原因可能是隱藏的救援/恢復分區,從硬盤末端夾住5-10 GB。