int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
struct statvfs {
unsigned long f_bsize; /* ファイルシステムのブロックサイズ */
unsigned long f_frsize; /* フラグメントサイズ */
fsblkcnt_t f_blocks; /* ファイルシステムのサイズ (f_frsize 単位) */
fsblkcnt_t f_bfree; /* 解放されているブロック数 */
fsblkcnt_t f_bavail; /* ルート以外の解放されているブロック数 */
fsfilcnt_t f_files; /* inode 数 */
fsfilcnt_t f_ffree; /* 解放されている inode の数 */
fsfilcnt_t f_favail; /* ルート以外の解放されている inode の数 */
unsigned long f_fsid; /* ファイルシステム ID */
unsigned long f_flag; /* マウントフラグ */
unsigned long f_namemax; /* ファイル名の長さの最大値 */
};
ここで、型 fsblkcnt_t と fsfilcnt_t は <sys/types.h> で定義されている。 かつて、これらは共に unsigned long であった。
フィールド f_flag は (マウントフラグの) ビットマスクである (マウントフラグについては、 mount(8) を参照すること)。 POSIX で定義されているビットは以下の通り:
返された構造体の全てのメンバが全てのファイルシステムで 意味のある値であるか否かは、指定されていない。
fstatvfs() は、ディスクリプタ fd で参照されるオープンされたファイルについて、同じ情報を返す。
現在の 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 フィールドを使う。