1. 程式人生 > >linux獲取SD卡分割槽使用百分比

linux獲取SD卡分割槽使用百分比

在嵌入式系統中經常用到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;
}