statvfs() - Unix,Linux系統呼叫
廣告
名稱
statvfs, fstatvfs - 獲取檔案系統統計資訊
概要
#include <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
|
描述
函式statvfs()返回有關已掛載檔案系統的資訊。path是已掛載檔案系統中任何檔案的路徑名。buf是指向statvfs結構的指標,其定義大致如下:
struct statvfs {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fragment size */
fsblkcnt_t f_blocks; /* size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* # free blocks */
fsblkcnt_t f_bavail; /* # free blocks for non-root */
fsfilcnt_t f_files; /* # inodes */
fsfilcnt_t f_ffree; /* # free inodes */
fsfilcnt_t f_favail; /* # free inodes for non-root */
unsigned long f_fsid; /* file system ID */
unsigned long f_flag; /* mount flags */
unsigned long f_namemax; /* maximum filename length */
};
|
這裡,型別fsblkcnt_t和fsfilcnt_t在<sys/types.h>中定義。兩者都曾經是unsigned long。 欄位f_flag是一個位掩碼(掛載標誌,參見mount(8))。POSIX定義的位是:
標籤 | 描述 |
ST_RDONLY | 只讀檔案系統。 |
ST_NOSUID | exec(2)忽略設定使用者ID/設定組ID位。 |
返回的結構的所有成員在所有檔案系統上是否都有有意義的值是不確定的。
fstatvfs()返回有關由描述符fd引用的開啟檔案相同的 資訊。
返回值
成功時,返回零。發生錯誤時,返回-1,並相應地設定errno。
錯誤
錯誤程式碼 | 描述 |
EACCES | (statvfs()) 對path路徑字首的組成部分拒絕搜尋許可權。(另見path_resolution(2)。) |
EBADF | (fstatvfs()) fd不是有效的開啟檔案描述符。 |
EFAULT |
Buf或path指向無效地址。 |
EINTR | 此呼叫被訊號中斷。 |
EIO | 從檔案系統讀取時發生I/O錯誤。 |
ELOOP | (statvfs()) 在轉換path時遇到太多符號連結。 |
ENAMETOOLONG | (statvfs()) path太長。 |
ENOENT | (statvfs()) path引用的檔案不存在。 |
ENOMEM | 可用核心記憶體不足。 |
ENOSYS | 檔案系統不支援此呼叫。 |
ENOTDIR | (statvfs()) path路徑字首的組成部分不是目錄。 |
EOVERFLOW | 某些值太大,無法在返回的結構中表示。 |
符合標準
Solaris, Irix, POSIX.1-2001
備註
Linux核心有系統呼叫statfs()和fstatfs()來支援此庫呼叫。
當前glibc的實現
pathconf(path, _PC_REC_XFER_ALIGN);
pathconf(path, _PC_ALLOC_SIZE_MIN);
pathconf(path, _PC_REC_MIN_XFER_SIZE);
|
使用statvfs(path,buf)返回值的f_frsize、f_frsize和f_bsize欄位。
參見
廣告
|