最近在學習Linux的過程中,需要查看磁盤使用情況,於是查找資料,發現statfs函數可以勝任這個任務.下面將簡單介紹statfs函數及其使用。
函數如下:
int statfs(const charpath, struct statfsbuf);
參數:
path: 位於需要查詢信息的文件系統的文件路徑
buf: statfs結構體類型的指針變量,用於存儲文件系統的相關信息
**
struct statfs{
long f_type; //文件系統的類型
long f_bsize; //經優化后的傳輸塊的大小
long f_blocks; //文件系統數據塊總數
long f_bfree; //可用塊數
long f_bavail; //普通用戶能夠獲得的塊數
long f_files; //文件結點總數
long f_ffree; //可用文件結點數
fisd_t f_fsid; //文件系統標識
long f_namelen; //文件名的最大長度
}
要使用該函數首先要導入<sys/statfs.h>頭文件,下面是一個簡單的測試:
#include <sys/statfs.h>
#include <stdio.h>
#include <stdint.h>
#define KB 1024.0 // 2^10
#define MB 1048576.0 // 2^20
#define GB 1073741824.0 // 2^30
int main(void)
{
struct statfs diskInfo;
statfs("/home/", &diskInfo);
uint64_t blocksize = diskInfo.f_bsize; // 每個block里包含的字節數
uint64_t totalsize = blocksize * diskInfo.f_blocks; // 總的字節數,f_blocks為block的數目
printf("塊數:%lld",diskInfo.f_blocks);
printf("Total_size = %lld B = %f KB = %f MB = %f GB\n",
totalsize,
totalsize / KB,
totalsize / MB,
totalsize / GB);
uint64_t freeDisk = diskInfo.f_bfree * blocksize; // 剩余空間的大小
uint64_t availableDisk = diskInfo.f_bavail * blocksize; // 可用空間大小
printf("Disk_free = %f MB = %f GB\n"
"Disk_available = %f MB = %f GB\n",
freeDisk / MB,
freeDisk / GB,
availableDisk / MB,
availableDisk / GB);
return 0;
}
運行結果如下圖所示:
鍵入 df -h /home,查看磁盤所用情況進行對比: