使用statvfs64读取文件系统信息

使用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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值