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;
}
4

2 回答 2

8

只是不同的技嘉定义。您使用 1 GB = 2 30字节,许多硬盘供应商使用 10 9字节。

例如,使用后一种定义的制造商提供的“80 GB”磁盘将容纳 80,000,000,000 字节,即 78,125,000 KB、76,294 MB 或(如您所验证的)74.51 GB,其中我所有的单元都使用二次幂定义。

于 2012-07-20T11:50:50.507 回答
0

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

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

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

于 2012-07-20T14:06:10.507 回答