名前
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; /* ファイルシステムのブロックサイズ */ 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 で定義されているビットは以下の通り:
ST_RDONLY | |
読み込み専用のファイルシステム。 | |
ST_NOSUID | |
exec(2) に無視される set-user-id/set-group-ID ビット。 | |
fstatvfs() は、ディスクリプタ fd で参照されるオープンされたファイルについて、同じ情報を返す。
返り値
成功した場合、0 が返される。 エラーの場合、-1 が返されて、 errno が適切に設定される。
エラー
EACCES | (statvfs() の場合) path のディレクトリ部分に検索許可が与えられていない (path_resolution(7) も参照すること)。 |
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 | |
いくつかの値は、返される構造体で表現するには大きすぎる。 | |
準拠
POSIX.1-2001
注意
Linux カーネルには、このライブラリコールをサポートするために、 statfs(2), fstatfs(2) システムコールがある。
現在の 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 フィールドを使う。