Linux c獲取任意路徑的硬盤使用情況
阿新 • • 發佈:2018-06-28
超級 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獲取任意路徑的硬盤使用情況