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> /* 或 <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 */
};

File system types:

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

廣告


  

廣告



廣告