statfs() - Unix,Linux系統呼叫 - 技術教學
Tutorials Point


  Unix入門
  Unix Shell程式設計
  高階Unix
  Unix實用參考
  Unix實用資源
  精選閱讀

版權所有 © 2014 tutorialspoint



  首頁     參考     討論論壇     關於TP  

statfs() - Unix,Linux系統呼叫


previous next AddThis Social Bookmark Button

廣告

名稱

statfs, fstatfs - 獲取檔案系統統計資訊

概要

#include <sys/vfs.h>    /* or <sys/statfs.h> */ 

int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);

描述

函式statfs() 返回有關已掛載檔案系統的資訊。path 是已掛載檔案系統中任何檔案的路徑名。buf 是指向statfs 結構的指標,其定義大致如下:

struct statfs {
   long    f_type;     /* type of filesystem (see below) */
   long    f_bsize;    /* optimal transfer block size */
   long    f_blocks;   /* total data blocks in file system */
   long    f_bfree;    /* free blocks in fs */
   long    f_bavail;   /* free blocks avail to non-superuser */
   long    f_files;    /* total file nodes in file system */
   long    f_ffree;    /* free file nodes in fs */
   fsid_t  f_fsid;     /* file system id */
   long    f_namelen;  /* maximum length of filenames */
};

檔案系統型別

   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

沒有人知道f_fsid 應該包含什麼內容(但請參見下文)。

對於特定檔案系統未定義的欄位設定為 0。fstatfs() 返回有關由描述符fd 引用的開啟檔案相同的資訊。

返回值

成功時,返回零。出錯時,返回 -1,並相應地設定errno

錯誤

錯誤程式碼描述
EACCES (statfs()) 對path 的路徑字首的組成部分拒絕搜尋許可權。(另請參見path_resolution(2)。)
EBADF (fstatfs()) fd 不是有效的開啟檔案描述符。
EFAULT bufpath 指向無效地址。
EINTR 此呼叫被訊號中斷。
EIO 從檔案系統讀取時發生 I/O 錯誤。
ELOOP (statfs()) 在轉換path 時遇到太多符號連結。
ENAMETOOLONG (statfs()) path 太長。
ENOENT (statfs()) path 引用的檔案不存在。
ENOMEM 可用核心記憶體不足。
ENOSYS 檔案系統不支援此呼叫。
ENOTDIR (statfs()) path 的路徑字首的組成部分不是目錄。
EOVERFLOW 某些值太大,無法在返回的結構中表示。

符合標準

Linux statfs() 的靈感來自 4.4BSD 版本(但它們不使用相同的結構)。

註釋

核心具有系統呼叫statfs()、fstatfs()、statfs64() 和fstatfs64() 來支援此庫呼叫。

某些系統只有 <sys/vfs.h>,其他系統也具有 <sys/statfs.h>,前者包含後者。因此,包含前者似乎是最佳選擇。

LSB 已棄用庫呼叫statfs() 和fstatfs(),並建議我們改用statvfs() 和fstatvfs()。

f_fsid 欄位

Solaris、Irix 和 POSIX 具有返回struct statvfs(在<sys/statvfs.h> 中定義)的系統呼叫statvfs(2),其中包含unsigned long f_fsid。Linux、SunOS、HP-UX、4.4BSD 具有返回struct statfs(在<sys/vfs.h> 中定義)的系統呼叫statfs(),其中包含fsid_t f_fsid,其中fsid_t 定義為struct { int val[2]; }。FreeBSD 也一樣,只是它使用包含檔案<sys/mount.h>

總體思路是f_fsid 包含一些隨機內容,以便對 (f_fsid,ino) 唯一地確定一個檔案。某些作業系統使用(變化的)裝置號,或者裝置號與檔案系統型別組合在一起。幾個作業系統僅將f_fsid 欄位的輸出限制為超級使用者(並將其對非特權使用者清零),因為此欄位在 NFS 匯出時用於檔案系統的檔案控制代碼,而將其輸出是一個安全問題。

在某些作業系統下,fsid 可以用作sysfs() 系統呼叫的第二個引數。

參見



previous next Printer Friendly

廣告


  

廣告



廣告
© . All rights reserved.