int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);
struct statvfs {
unsigned long f_bsize; /* Filesystem block size */
unsigned long f_frsize; /* Fragment size */
fsblkcnt_t f_blocks; /* Size of fs in f_frsize units */
fsblkcnt_t f_bfree; /* Number of free blocks */
fsblkcnt_t f_bavail; /* Number of free blocks for
unprivileged users */
fsfilcnt_t f_files; /* Number of inodes */
fsfilcnt_t f_ffree; /* Number of free inodes */
fsfilcnt_t f_favail; /* Number of free inodes for
unprivileged users */
unsigned long f_fsid; /* Filesystem ID */
unsigned long f_flag; /* Mount flags */
unsigned long f_namemax; /* Maximum filename length */
};
ここで、型 fsblkcnt_t と fsfilcnt_t は <sys/types.h> で定義されている。 かつて、これらは共に unsigned long であった。
The field f_flag is a bit mask indicating various options that were employed when mounting this filesystem. It contains zero or more of the following flags:
返された構造体の全てのメンバが全てのファイルシステムで 意味のある値であるか否かは、指定されていない。
fstatvfs() は、ディスクリプター fd で参照されるオープンされたファイルについて、同じ情報を返す。
インターフェース | 属性 | 値 |
statvfs(), fstatvfs() | Thread safety | MT-Safe |
Only the ST_NOSUID and ST_RDONLY flags of the f_flag field are specified in POSIX.1. To obtain definitions of the remaining flags, one must define _GNU_SOURCE.
In glibc versions before 2.13, statvfs() populated the bits of the f_flag field by scanning the mount options shown in /proc/mounts. However, starting with Linux 2.6.36, the underlying statfs(2) system call provides the necessary information via the f_flags field, and since glibc version 2.13, the statvfs() function will use information from that field rather than scanning /proc/mounts.
The glibc implementations of
pathconf(path, _PC_REC_XFER_ALIGN); pathconf(path, _PC_ALLOC_SIZE_MIN); pathconf(path, _PC_REC_MIN_XFER_SIZE);
respectively use the f_frsize, f_frsize, and f_bsize fields returned by a call to statvfs() with the argument path.