statfs() - Unix,Linux系統呼叫
廣告
名稱
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 |
buf 或path 指向無效地址。 |
|
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() 系統呼叫的第二個引數。
參見
廣告
|