计算硬盘大小

时间:2012-07-20 11:49:06

标签: c linux

我已经编写了一个代码来计算硬盘大小,但由于某种原因,它总是给出的尺寸小于实际尺寸。

同样,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;
}

2 个答案:

答案 0 :(得分:8)

简单different Gigabyte definitions。您使用1 GB = 2 30 字节,许多硬盘供应商使用10 9 字节。

例如,使用后一种定义的制造商生产的“80 GB”磁盘将保留80,000,000,000字节,相当于78,125,000 KB,76,294 MB或(经过验证)74.51 GB,其中我的所有设备都使用2的幂定义

答案 1 :(得分:0)

除了千兆字节和千兆字节之间的差异外,还有要注意的分区格式。

所有元数据和目录结构(以及日志文件......)都会窃取一些可用空间。

另一个原因可能是隐藏的救援/恢复分区,它从硬盘驱动器末端捏了5-10 GB。