功能描述:
查詢檔案系統相關的信息。
用法:
#include <sys/vfs.h> /* 或者 <sys/statfs.h> */
int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);
參數:
path: 位於需要查詢信息的檔案系統的檔案路徑名。
fd: 位於需要查詢信息的檔案系統的檔案描述詞。
buf:以下結構體的指針變數,用於儲存檔案系統相關的信息
struct statfs {
long f_type; /* 檔案系統類型 */
long f_bsize; /* 經過最佳化的傳輸塊大小 */
long f_blocks; /* 檔案系統數據塊總數 */
long f_bfree; /* 可用塊數 */
long f_bavail; /* 非超級用戶可獲取的塊數 */
long f_files; /* 檔案結點總數 */
long f_ffree; /* 可用檔案結點數 */
fsid_t f_fsid; /* 檔案系統標識 */
long f_namelen; /* 檔案名稱的最大長度 */
};
返回說明:
成功執行時,返回0。失敗返回-1,errno被設為以下的某個值
EACCES: (statfs())檔案或路徑名中包含的目錄不可訪問
EBADF : (fstatfs()) 檔案描述詞無效
EFAULT: 記憶體地址無效
EINTR : 操作由信號中斷
EIO : 讀寫出錯
ELOOP : (statfs())解釋路徑名過程中存在太多的符號連線
ENAMETOOLONG:(statfs()) 路徑名太長
ENOENT:(statfs()) 檔案不存在
ENOMEM: 核心記憶體不足
ENOSYS: 檔案系統不支持調用
ENOTDIR:(statfs())路徑名中當作目錄的組件並非目錄
EOVERFLOW:信息溢出
例:
說明:pDisk 路徑名 如“/home”
int DH_GetDiskFreeSpacePercent(char *pDisk)
{
long long freespace = 0;
struct statfs disk_statfs;
long long totalspace = 0;
float freeSpacePercent = 0 ;
if( statfs(pDisk, &disk_statfs) >= 0 )
{
freespace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_bfree)/(long long)1024);
totalspace = (((long long)disk_statfs.f_bsize * (long long)disk_statfs.f_blocks) /(long long)1024);
}
freeSpacePercent = ((float)freespace/(float)totalspace)*100 ;
return freeSpacePercent ;
}