【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看一下實際結果:

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM