1. 程式人生 > 其它 >【Linux環境】linux下利用核心statfs()函式檢視磁碟的使用情況

【Linux環境】linux下利用核心statfs()函式檢視磁碟的使用情況

       最近有開發有個需求,需要根據系統中某一檔案系統的總容量規模情況,進行彈性調節回收資源執行緒的啟動時機。本人的環境是linux,並且需要用c語言進行處理。

        網上查詢資料發現核心函式statfs可以完成這個任務,下面就結合網上的一些資料和書上的一些資訊,簡單介紹一下這個函式和它的使用方法。

       1.  函式的宣告如下:

        int statfs(const char path,struct statfs buf);

       (1) 入參:

    path:位於需要查詢資訊的檔案系統的檔案的路徑;

         buf: statfs結構體型別的指標變數,用於儲存檔案系統的相關資訊。

       (2)statfs結構體:

 1 struct statfs{
 2     long f_type;     //檔案系統的型別
 3     long f_bsize;   //經優化後的傳輸塊的大小
 4     long f_blocks;  //檔案系統資料塊總數
 5     long f_bfree;    //可用塊數
 6     long f_bavail;   //普通使用者能夠獲得的塊數
 7     long f_files;      //檔案結點總數
 8     long f_ffree;     //可用檔案結點數
 9     fisd_t f_fsid;     //檔案系統標識
10 long f_namelen; //檔名的最大長度 11 }

   (3)注意點

    這個函式在<sys/statfs.h>標頭檔案中包含著,所以編碼時需要引用進去。

  2. 編寫簡單測試用例

  動手的機會來了,簡單的測試程式碼如下:

  

 1 #include <sys/statfs.h>
 2 #include <stdio.h>
 3 
 4 int main(int argc,char **argv)
 5 {
 6     struct statfs diskInfo;
 7     
 8     /* 1.獲取/home/下面的總容量 
*/ 9 statfs("/home/", &diskInfo); 10 unsigned long long blocksize = diskInfo.f_bsize; //每個block裡包含的位元組數 11 unsigned long long totalsize = blocksize * diskInfo.f_blocks;//總的位元組數,f_blocks為block的數目 12 printf("Total_size=%llu B =%llu KB =%llu MB = %llu GB\n", 13 totalsize,totalsize>>10,totalsize>>20, totalsize>>30); 14 15 /* 2.獲取一下剩餘空間和可用空間的大小 */ 16 unsigned long long freeDisk = diskInfo.f_bfree * blocksize; //剩餘空間的大小 17 unsigned long long availableDisk = diskInfo.f_bavail * blocksize; //可用空間大小 18 printf("Disk_free=%llu MB =%llu GB Disk_available=%llu MB = %llu GB\n", 19 freeDisk>>20,freeDisk>>30,availableDisk>>20, availableDisk>>30); 20 21 return 0; 22 }

  結果如下:

  

  然後df -h看一下實際結果: