我一直在尝试使用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 ...
它似乎并不总是返回它。因为我可以在文件上使用它。我之前也曾在硬盘上工作过。
答案 0 :(得分:0)
你得到的是这种结果,因为这不是获得磁盘大小的正确方法。
如果你想检查磁盘的大小,你应该在磁盘fd上发出一个ioctl(),请求是BLKGETSIZE64(以及指向long long的参数)。
long long disk_size;
ioctl(<disk_fd>, BLKGETSIZE64, &disk_size);
如果您对文件系统大小(可能不同)或文件系统上的空白空间感兴趣,请使用statvfs()
调用。