用fseek()获取大小硬盘

时间:2013-12-05 05:32:58

标签: size hard-drive fseek

我一直在尝试使用fseek()在Linux系统上获取硬盘大小。

我有一个应该返回正确大小的函数:

unsigned long long getsize(FILE *fp){
    unsigned long long prev=ftell(fp);
    fseek(fp,0,SEEK_END);
    unsigned long long size=ftell(fp);
    fseek(fp,prev,SEEK_SET);
    return size;
}

但是当我在硬盘上使用它时它返回18446744073709551615或2 ^ 64-1 ...

它似乎并不总是返回它。因为我可以在文件上使用它。我之前也曾在硬盘上工作过。

1 个答案:

答案 0 :(得分:0)

你得到的是这种结果,因为这不是获得磁盘大小的正确方法。

如果你想检查磁盘的大小,你应该在磁盘fd上发出一个ioctl(),请求是BLKGETSIZE64(以及指向long long的参数)。

long long disk_size;
ioctl(<disk_fd>, BLKGETSIZE64, &disk_size);

如果您对文件系统大小(可能不同)或文件系统上的空白空间感兴趣,请使用statvfs()调用。