名 前
statfs, fstatfs − フ ァ イ ル シ ス テ ム の 統 計 を 取 得 す る
書 式
#include <sys/vfs.h> /* ま た は <sys/statfs.h> */
int
statfs(const char *path, struct statfs
*buf);
int fstatfs(int fd, struct statfs
*buf);
説 明
関 数 statfs() は マ ウ ン ト さ れ た フ ァ イ ル シ ス テ ム に つ い て の 情 報 を 返 す 。 path は マ ウ ン ト さ れ た フ ァ イ ル シ ス テ ム に あ る フ ァ イ ル の パ ス 名 で あ る 。 buf は statfs 構 造 体 へ の ポ イ ン タ ー で 、 お よ そ 以 下 の よ う に 定 義 さ れ る :
#if __WORDSIZE == 32 |
|||||
/* シ ス テ ム の ワ ー ド サ イ ズ */ |
# define __SWORD_TYPE int
#else /* __WORDSIZE == 64 */
# define __SWORD_TYPE |
|||||
long int |
#endif
struct statfs {
__SWORD_TYPE f_type; /* フ ァ イ ル
シ ス テ ム の 種
別 (下 記 参 照 ) */
__SWORD_TYPE f_bsize; /* 最 適 な 転
送 ブ ロ ッ ク サ
イ ズ */
fsblkcnt_t f_blocks; /* フ ァ イ ル
シ ス テ ム の 総
デ ー タ ブ ロ ッ
ク 数 */
fsblkcnt_t f_bfree; /* フ ァ イ ル
シ ス テ ム の 空
き ブ ロ ッ ク 数 */
fsblkcnt_t f_bavail; /* 非 特 権 ユ
ー ザ ー が 利 用
可 能 な 空 き ブ
ロ ッ ク 数 */
fsfilcnt_t f_files; /* フ ァ イ ル
シ ス テ ム の 総
フ ァ イ ル ノ ー
ド 数 */
fsfilcnt_t f_ffree; /* フ ァ イ ル
シ ス テ ム の 空
き フ ァ イ ル ノ
ー ド 数 */
fsid_t f_fsid; /* フ ァ イ ル
シ ス テ ム の ID */
__SWORD_TYPE f_namelen; /* フ ァ イ
ル 名 の 最 大 長 */
__SWORD_TYPE f_frsize; /* フ ラ グ
メ ン ト サ イ ズ (Linux
2.6 以 降 ) */
__SWORD_TYPE f_spare[5]; }; フ ァ イ
ル シ ス テ ム の
型 :
ADFS_SUPER_MAGIC
0xadf5
AFFS_SUPER_MAGIC 0xADFF
BDEVFS_MAGIC 0x62646576
BEFS_SUPER_MAGIC 0x42465331
BFS_MAGIC 0x1BADFACE
BINFMTFS_MAGIC 0x42494e4d
BTRFS_SUPER_MAGIC 0x9123683E
CGROUP_SUPER_MAGIC 0x27e0eb
CIFS_MAGIC_NUMBER 0xFF534D42
CODA_SUPER_MAGIC 0x73757245
COH_SUPER_MAGIC 0x012FF7B7
CRAMFS_MAGIC 0x28cd3d45
DEBUGFS_MAGIC 0x64626720
DEVFS_SUPER_MAGIC 0x1373
DEVPTS_SUPER_MAGIC 0x1cd1
EFIVARFS_MAGIC 0xde5e81e4
EFS_SUPER_MAGIC 0x00414A53
EXT_SUPER_MAGIC 0x137D
EXT2_OLD_SUPER_MAGIC 0xEF51
EXT2_SUPER_MAGIC 0xEF53
EXT3_SUPER_MAGIC 0xEF53
EXT4_SUPER_MAGIC 0xEF53
FUSE_SUPER_MAGIC 0x65735546
FUTEXFS_SUPER_MAGIC 0xBAD1DEA
HFS_SUPER_MAGIC 0x4244
HOSTFS_SUPER_MAGIC 0x00c0ffee
HPFS_SUPER_MAGIC 0xF995E849
HUGETLBFS_MAGIC 0x958458f6
ISOFS_SUPER_MAGIC 0x9660
JFFS2_SUPER_MAGIC 0x72b6
JFS_SUPER_MAGIC 0x3153464a
MINIX_SUPER_MAGIC 0x137F /* オ リ ジ
ナ ル の minix */
MINIX_SUPER_MAGIC2 0x138F /* 30 文 字 フ
ァ イ ル 名 の minix */
MINIX2_SUPER_MAGIC 0x2468 /* minix V2 */
MINIX2_SUPER_MAGIC2 0x2478 /* minix V2, 30 文 字
フ ァ イ ル 名 */
MINIX3_SUPER_MAGIC 0x4d5a /* minix V3 フ ァ
イ ル シ ス テ ム , 60
文 字 フ ァ イ ル
名 */
MQUEUE_MAGIC 0x19800202
MSDOS_SUPER_MAGIC 0x4d44
NCP_SUPER_MAGIC 0x564c
NFS_SUPER_MAGIC 0x6969
NILFS_SUPER_MAGIC 0x3434
NTFS_SB_MAGIC 0x5346544e
OPENPROM_SUPER_MAGIC 0x9fa1
PIPEFS_MAGIC 0x50495045
PROC_SUPER_MAGIC 0x9fa0
PSTOREFS_MAGIC 0x6165676C
QNX4_SUPER_MAGIC 0x002f
QNX6_SUPER_MAGIC 0x68191122
RAMFS_MAGIC 0x858458f6
REISERFS_SUPER_MAGIC 0x52654973
ROMFS_MAGIC 0x7275
SELINUX_MAGIC 0xf97cff8c
SMACK_MAGIC 0x43415d53
SMB_SUPER_MAGIC 0x517B
SOCKFS_MAGIC 0x534F434B
SQUASHFS_MAGIC 0x73717368
SYSFS_MAGIC 0x62656572
SYSV2_SUPER_MAGIC 0x012FF7B6
SYSV4_SUPER_MAGIC 0x012FF7B5
TMPFS_MAGIC 0x01021994
UDF_SUPER_MAGIC 0x15013346
UFS_MAGIC 0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
V9FS_MAGIC 0x01021997
VXFS_SUPER_MAGIC 0xa501FCF5
XENFS_SUPER_MAGIC 0xabba1974
XENIX_SUPER_MAGIC 0x012FF7B4
XFS_SUPER_MAGIC 0x58465342
_XIAFS_SUPER_MAGIC 0x012FD16D こ れ ら
の MAGIC 定 数 の ほ と
ん ど は /usr/include/linux/magic.h
で 定 義 さ れ て
お り 、 い く つ
か は カ ー ネ ル
ソ ー ス で 直 接
書 か れ て い る
。
f_fsid に ど ん な 値 が 入 る べ き な の か は 誰 も 知 ら な い (但 し 、 下 記 を 参 照 )。 そ れ ぞ れ の フ ァ イ ル シ ス テ ム に お い て 未 定 義 の フ ィ ー ル ド に は 0 が 設 定 さ れ る 。 fstatfs() は デ ィ ス ク リ プ タ ー fd に よ っ て 参 照 さ れ る オ ー プ ン さ れ た フ ァ イ ル に つ い て 、 同 じ 情 報 を 返 す 。
返 り 値
成 功 し た 場 合 、 0 が 返 さ れ る 。 失 敗 し た 場 合 、 −1 が 返 さ れ 、 errno に 適 切 な 値 が セ ッ ト さ れ る 。
エ ラ ー
EACCES |
(statfs() の 場 合 ) path の デ ィ レ ク ト リ 部 分 に 検 索 許 可 が 与 え ら れ て い な い (path_resolution(7) も 参 照 す る こ と )。 | ||
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 固 有 で あ る 。 Linux の statfs() は 4.4BSD の も の に 影 響 を 受 け て い る 。 (し か し 同 じ 構 造 体 を 使 用 し て い る わ け で は な い )
注 意
元 々 の Linux の statfs() と fstatfs() シ ス テ ム コ ー ル は 非 常 に 大 き な フ ァ イ ル サ イ ズ を 念 頭 に 入 れ て 設 計 さ れ て い な か っ た 。 そ の 後 、 Linux 2.6 で 、 新 し い 構 造 体 statfs64 を 使 用 す る 新 し い シ ス テ ム コ ー ル statfs64() と fstatfs64() が 追 加 さ れ た 。 新 し い 構 造 体 は 元 の statfs 構 造 体 と 同 じ フ ィ ー ル ド を 持 つ が 、 い ろ い ろ な フ ィ ー ル ド の サ イ ズ が 大 き な フ ァ イ ル サ イ ズ に 対 応 で き る よ う に 増 や さ れ て い る 。 glibc の statfs() と fstatfs() の ラ ッ パ ー 関 数 は カ ー ネ ル に よ る こ れ ら の 違 い を 吸 収 し て い る 。
<sys/vfs.h> し か 持 た な い シ ス テ ム も あ り 、 <sys/statfs.h> も 持 っ て い る シ ス テ ム も あ る 。 前 者 は 後 者 を イ ン ク ル ー ド す る の で 、 前 者 を イ ン ク ル ー ド す る の が 良 い と 考 え ら れ る 。
LSB で は ラ イ ブ ラ リ コ ー ル statfs(), fstatfs() を 非 推 奨 と し て 、 代 わ り に statvfs(2), fstatvfs(2) を 使 う よ う に 指 示 し て い る 。
f_fsid
フ ィ ー ル ド
Solaris, Irix, POSIX に は シ ス
テ ム コ ー ル
statvfs(2) が あ り 、
struct statvfs を 返 す
(<sys/statvfs.h> で 定 義
さ れ て い る )。
こ の 構 造 体 に
は 、 unsigned long f_fsid が
含 ま れ て い る
。 Linux, SunOS, HP−UX, 4.4BSD に は
シ ス テ ム コ ー
ル statfs() が あ り 、
struct statfs を 返 す
(<sys/vfs.h> で 定 義
さ れ て い る )。
こ の 構 造 体 に
は fsid_t f_fsid, が 含 ま
れ て お り 、 fsid_t
は struct { int val[2]; } と 定
義 さ れ て い る
。 FreeBSD で も 同 じ
で あ る が 、 イ
ン ク ル ー ド フ
ァ イ ル <sys/mount.h>
を 使 う 。
f_fsid は あ る ラ ン ダ ム な 値 を 持 ち 、 (f_fsid,ino) と い う 1 組 の 値 で フ ァ イ ル を 一 意 に 決 定 で き る よ う に す る 、 と い う の が 基 本 的 な 考 え 方 で あ る 。 い く つ か の OS で は 、 デ バ イ ス 番 号 (の 変 種 ) を 使 っ た り 、 デ バ イ ス 番 号 と フ ァ イ ル シ ス テ ム タ イ プ を 組 み 合 わ せ て 使 っ た り し て い る 。 OS の 中 に は f_fsid フ ィ ー ル ド の 取 得 を ス ー パ ー ユ ー ザ ー に 限 定 し て い る も の も あ る (非 特 権 ユ ー ザ ー が 取 得 す る と 0 と な る )。 NFS で エ ク ス ポ ー ト さ れ る 場 合 、 こ の フ ィ ー ル ド が フ ァ イ ル シ ス テ ム の フ ァ イ ル ハ ン ド ル で 使 わ れ て お り 、 こ の 値 を 提 供 す る と セ キ ュ リ テ ィ 上 の 問 題 が あ る 。 い く つ か の OS で は 、 fsid を sysfs(2) シ ス テ ム コ ー ル の 第 2 引 き 数 と し て 使 用 で き る 。
バ グ
Linux 2.6.38 か ら Linux 3.1 ま で は (3.1 を 含 む )、 fstatfs() は pipe(2) で 作 成 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー に 対 し て は エ ラ ー ENOSYS で 失 敗 し て い た 。
関 連 項 目
stat(2), statvfs(2), path_resolution(7)
こ の 文 書 に つ い て
こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。