2012-07-20 115 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。