1. 程式人生 > >Linux c獲取任意路徑的硬盤使用情況

Linux c獲取任意路徑的硬盤使用情況

超級 stdlib.h eof 返回 命令 總空間 pre linux c In

沒有什麽好說的,其實就是獲取硬盤的statfs信息結構

代碼如下:

技術分享圖片
#include <stdio.h>
#include <stdlib.h>
#include <sys/statfs.h>
#include <sys/vfs.h>
#include <string.h>
#include <errno.h>

#define DEFAULT_DISK_PATH "/home"

typedef  struct statfs DISK,*pDISK;

//獲取包含磁盤空間信息的結構體
//參數二:要獲取磁盤信息的位置
//返回值:成功返回1,失敗返回0
int getDiskInfo(pDISK diskInfo,const char *path)
{
    char dpath[100]=DEFAULT_DISK_PATH;//設置默認位置
    int flag=0;

    if(NULL!=path)
    {
        strcpy(dpath,path);
    }

    if(-1==(flag=statfs(dpath,diskInfo)))//獲取包含磁盤空間信息的結構體
    {
        perror("getDiskInfo statfs fail");
        return 0;
    }

    return 1;
}

//計算磁盤總空間,非超級用戶可用空間,磁盤所有剩余空間,計算結果以字符串的形式存儲到三個字符串裏面,單位為MB
int calDiskInfo(char *diskTotal,char *diskAvail,char *diskFree,pDISK diskInfo)
{
    unsigned long long total=0,avail=0,free=0,blockSize=0;
    int flag=0;

    if(!diskTotal&&diskAvail&&diskFree&&diskInfo)
    {
        printf("\ncalDiskInfo param null!\n");
        return 0;
    }
    blockSize=diskInfo->f_bsize;//每塊包含字節大小
    total=diskInfo->f_blocks*blockSize;//磁盤總空間
    avail=diskInfo->f_bavail*blockSize;//非超級用戶可用空間
    free=diskInfo->f_bfree*blockSize;//磁盤所有剩余空間

    //字符串轉換
    flag=sprintf(diskTotal,"%llu",total>>20);
    flag=sprintf(diskAvail,"%llu",avail>>20);
    flag=sprintf(diskFree,"%llu",free>>20);

    if(-1==flag)
    {
        return 0;
    }
    return 1;

}


int main()
{
    DISK diskInfo;
    char str1[30],str2[30],str3[30];

    memset(&diskInfo,0,sizeof(DISK));

    getDiskInfo(&diskInfo,DEFAULT_DISK_PATH);//獲取磁盤信息結構體

    calDiskInfo(str1,str2,str3,&diskInfo);//計算磁盤信息結構體

    printf("\ntotal:%s avail:%s free%s\n",str1,str2,str3);
    printf("Hello world!\n");
    return 0;
}
技術分享圖片

運行結果如下,結果單位為MB

技術分享圖片

使用df命令獲取的磁盤信息

技術分享圖片

可見,結果是差不多的。

轉自:https://www.cnblogs.com/thegodofthunder/p/7234803.html

Linux c獲取任意路徑的硬盤使用情況