我正在编写一个跨平台应用程序,需要获取可用的磁盘空间。对于posix系统(Linux和MacOS),我使用statvfs。我创建了这个C++方法:
long OSSpecificPosix::getFreeDiskSpace(const char* absoluteFilePath) {
struct statvfs buf;
if (!statvfs(absoluteFilePath, &buf)) {
unsigned long blksize, blocks, freeblks, disk_size, used, free;
blksize = buf.f_bsize;
blocks = buf.f_blocks;
freeblks = buf.f_bfree;
disk_size = blocks*blksize;
free = freeblks*blksize;
used = disk_size - free;
return free;
}
else {
return -1;
}
}
很不幸,我得到了一些奇怪的值,无法理解。例如: f_blocks = 73242188 f_bsize = 1048576 f_bfree = 50393643 ...
这些值是以位、字节或其他形式表示的吗?我在stackoverflow上读到这些应该是字节,但是那么我将得到可用字节数的总数为: f_bsize*f_bfree = 1048576*50393643 但这意味着49212.542GB...太多了...
我是不是在代码或其他方面做错了什么? 谢谢!
f_bsize
和f_frsize
是否相等。我敢打赌它们不相等。块数和可用块数是指f_frsize
,而不是f_bsize
。 - Steve Jessop