在嵌入式系统中经常用到SD卡作数据存储,但由于SD卡存储大小有限,需要对磁盘使用量进行判断,防止数据存储失败。
获取方法:
使用statfs函数查询文件系统状态信息,通过分区信息中的block总大小、使用量即可计算使用百分比。
1、在终端输入man statfs 查看函数statfs详细用法:
2、需要包含头文件#include <sys/vfs.h> 或者 #include<sys/statfs.h>
3、参数path为文件系统挂载点名称。
4、参数buf 为文件系统描述结构体指针,其中statfs结构体中 f_blocks 表示文件系统总数据块数,f_bavail表示文件系统用户可用的数据块数。
5、如下为查询根文件系统使用百分比代码,若要查询sd卡使用百分比,修改sd卡挂载点名称即可。
#include <stdio.h>
#include <sys/vfs.h>
#define MOUNT_AREA_NAME "/" //文件系统挂载点名称
unsigned int get_sd_used_percent()
{
unsigned int percent = 0;
struct statfs diskInfo;
statfs(MOUNT_AREA_NAME,&diskInfo);
unsigned long int f_blocks = diskInfo.f_blocks;
unsigned long int f_bavail = diskInfo.f_bavail;
if(f_bavail > f_blocks)
{
printf("Error: diskInfo.f_bavail > diskInfo.f_blocks!!\n");
}
else
{
double free_percent = f_bavail*100.0/f_blocks;
unsigned int free_percent_int = (unsigned int)free_percent;
if(free_percent - free_percent_int >= 0.5) //四舍五入
free_percent_int++;
percent = 100 - free_percent_int;
printf("-----------Disk used percent:%d%%\n",percent);
}
return percent;
}
int main(int argc, char *argv[])
{
get_sd_used_percent();
return 0;
}