使用statvfs64获取磁盘空间容量信息
函数用法
long long GetDiskSpace()函数提供了获取设备的空间的总大小,可用大小,已使用大小,
单位分别为GB, MB, KB或者byte的方法。
这里 可用空间 = 总空间 - 已使用
#include <sys/statvfs.h>
typedef enum {
DST_TOTAL,
DST_USED,
DST_AVAIL,
}EDiskSpaceType;
typedef enum {
DSU_GB,
DSU_MB,
DSU_KB,
DSU_NONE,
}EDiskSpaceUnit;
long long GetDiskSpace(const char* in_pDevPathName,
EDiskSpaceType in_eDST, EDiskSpaceUnit in_eDSU)
{
long long uiSpaceSize = 0;
if (!in_pDevPathName || 0 == strcmp(in_pDevPathName, ""))
{
printf("statvfs can not start!\n");
return uiSpaceSize;
}
struct statvfs64 stVFS;
if ( -1 != statvfs64(in_pDevPathName, &stVFS) )
{
blocksize = stVFS.f_bsize;
switch(in_eDST)
{
case DST_TOTAL:
uiSpaceSize = static_cast<long long>(stVFS.f_blocks * blocksize);
break;
case DST_AVAIL:
uiSpaceSize = static_cast<long long>(stVFS.f_bavail * blocksize);
break;
case DST_USED:
uiSpaceSize = static_cast<long long>(stVFS.f_blocks * blocksize - stVFS.f_bavail * blocksize);
break;
default:
break;
}
if(uiSpaceSize < 0)
{
uiSpaceSize = 0;
}
switch(in_eDSU)
{
case DSU_GB:
uiSpaceSize >>= 30;
break;
case DSU_MB:
uiSpaceSize >>= 20;
break;
case DSU_KB:
uiSpaceSize >>= 10;
break;
default:
break;
}
}
return uiSpaceSize;
}