fstatfs/statfs詳解

【fstatfs/statfs系統調用】  
   
功能描述:  
查詢文件系統相關的信息。
   
用法:  
#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;  /* 文件名的最大長度 */
};

相關的文件系統類型有:
      ADFS_SUPER_MAGIC      0xadf5
      AFFS_SUPER_MAGIC      0xADFF
      BEFS_SUPER_MAGIC      0x42465331
   BFS_MAGIC             0x1BADFACE
   CIFS_MAGIC_NUMBER     0xFF534D42
   CODA_SUPER_MAGIC      0x73757245
      COH_SUPER_MAGIC       0x012FF7B7
   CRAMFS_MAGIC          0x28cd3d45
      DEVFS_SUPER_MAGIC     0x1373
      EFS_SUPER_MAGIC       0x00414A53
   EXT_SUPER_MAGIC       0x137D
   EXT2_OLD_SUPER_MAGIC  0xEF51
   EXT2_SUPER_MAGIC      0xEF53
   EXT3_SUPER_MAGIC      0xEF53
   HFS_SUPER_MAGIC       0x4244
   HPFS_SUPER_MAGIC      0xF995E849
   HUGETLBFS_MAGIC       0x958458f6
   ISOFS_SUPER_MAGIC     0x9660
   JFFS2_SUPER_MAGIC     0x72b6
   JFS_SUPER_MAGIC       0x3153464a
      MINIX_SUPER_MAGIC     0x137F /* orig. minix */
   MINIX_SUPER_MAGIC2    0x138F /* 30 char minix */
   MINIX2_SUPER_MAGIC    0x2468 /* minix V2 */
      MINIX2_SUPER_MAGIC2   0x2478 /* minix V2, 30 char names */
   MSDOS_SUPER_MAGIC     0x4d44
   NCP_SUPER_MAGIC       0x564c
   NFS_SUPER_MAGIC       0x6969
   NTFS_SB_MAGIC         0x5346544e
   OPENPROM_SUPER_MAGIC  0x9fa1
     PROC_SUPER_MAGIC      0x9fa0
   QNX4_SUPER_MAGIC      0x002f
      REISERFS_SUPER_MAGIC  0x52654973
   ROMFS_MAGIC           0x7275
   SMB_SUPER_MAGIC       0x517B
   SYSV2_SUPER_MAGIC     0x012FF7B6
   SYSV4_SUPER_MAGIC     0x012FF7B5
      TMPFS_MAGIC           0x01021994
   UDF_SUPER_MAGIC       0x15013346
   UFS_MAGIC             0x00011954
    USBDEVICE_SUPER_MAGIC 0x9fa2
   VXFS_SUPER_MAGIC      0xa501FCF5
   XENIX_SUPER_MAGIC     0x012FF7B4
   XFS_SUPER_MAGIC       0x58465342
   _XIAFS_SUPER_MAGIC    0x012FD16D
 
   
返回說明:  
成功執行時,返回0。失敗返回-1,errno被設爲以下的某個值  
 
EACCES: (statfs())文件或路徑名中包含的目錄不可訪問
EBADF : (fstatfs()) 文件描述詞無效
EFAULT: 內存地址無效
EINTR : 操作由信號中斷
EIO    : 讀寫出錯
ELOOP : (statfs())解釋路徑名過程中存在太多的符號連接
ENAMETOOLONG:(statfs()) 路徑名太長
ENOENT:(statfs()) 文件不存在
ENOMEM: 核心內存不足
ENOSYS: 文件系統不支持調用
ENOTDIR:(statfs())路徑名中當作目錄的組件並非目錄
EOVERFLOW:信息溢出

 

一個簡單的例子:

#include <sys/vfs.h>
#include <stdio.h>

int main()
{
    struct statfs diskInfo;
    statfs("/",&diskInfo);
    unsigned long long blocksize = diskInfo.f_bsize;// 每個block裏面包含的字節數
    unsigned long long totalsize = blocksize * diskInfo.f_blocks;//總的字節數
    printf("TOTAL_SIZE == %lu MB/n",totalsize>>20); // 1024*1024 =1MB  換算成MB單位

    unsigned long long freeDisk = diskInfo.f_bfree*blocksize; //再計算下剩餘的空間大小
    printf("DISK_FREE == %ld MB/n",freeDisk>>20);

 return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章