1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247
|
.\" Copyright (C) 2003 Andries Brouwer (aeb@cwi.nl)
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date. The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein. The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" Modified 2003-08-17 by Walter Harms
.\" Modified 2004-06-23 by Michael Kerrisk <mtk.manpages@gmail.com>
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\"
.\" Japanese Version Copyright (c) 1997 HANATAKA Shinya
.\" all rights reserved.
.\" Translated Fri Dec 12 00:25:54 JST 1997
.\" by HANATAKA Shinya <hanataka@abyss.rim.or.jp>
.\" Updated & Modified Sat Jun 2 20:25:46 JST 2001
.\" by Yuichi SATO <ysato@h4.dion.ne.jp>
.\" Updated & Modified Sat Jan 18 16:48:08 JST 2003
.\" by Yuichi SATO <ysato444@yahoo.co.jp>
.\" Updated & Modified Sun Sep 7 00:52:44 JST 2003 by Yuichi SATO
.\" Updated & Modified Sun Jan 9 22:35:28 JST 2005 by Yuichi SATO
.\" Updated 2006-07-21, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.36
.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
.\"
.TH STATFS 2 2014\-06\-13 Linux "Linux Programmer's Manual"
.SH 名前
statfs, fstatfs \- ファイルシステムの統計を取得する
.SH 書式
\fB#include <sys/vfs.h> \fP/* または <sys/statfs.h> */
.sp
\fBint statfs(const char *\fP\fIpath\fP\fB, struct statfs *\fP\fIbuf\fP\fB);\fP
.br
\fBint fstatfs(int \fP\fIfd\fP\fB, struct statfs *\fP\fIbuf\fP\fB);\fP
.SH 説明
関数 \fBstatfs\fP() はマウントされたファイルシステムについての情報を返す。 \fIpath\fP
はマウントされたファイルシステムにあるファイルのパス名である。 \fIbuf\fP は \fIstatfs\fP
構造体へのポインターで、およそ以下のように定義される:
.in +4n
.nf
#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
.fi
.in
.PP
これらの MAGIC 定数のほとんどは \fI/usr/include/linux/magic.h\fP
で定義されており、いくつかはカーネルソースで直接書かれている。
.PP
\fIf_fsid\fP にどんな値が入るべきなのかは誰も知らない (但し、下記を参照)。
.PP
それぞれのファイルシステムにおいて未定義のフィールドには 0 が 設定される。 \fBfstatfs\fP() はディスクリプター \fIfd\fP
によって参照されるオープンされたファイルについて、同じ情報を返す。
.SH 返り値
成功した場合、0 が返される。 失敗した場合、 \-1 が返され、 \fIerrno\fP に適切な値がセットされる。
.SH エラー
.TP
\fBEACCES\fP
(\fBstatfs\fP() の場合) \fIpath\fP のディレクトリ部分に検索許可が与えられていない (\fBpath_resolution\fP(7)
も参照すること)。
.TP
\fBEBADF\fP
(\fBfstatfs\fP() の場合) \fIfd\fP は有効なオープンされたファイルディスクリプターではない。
.TP
\fBEFAULT\fP
\fIbuf\fP または \fIpath\fP が不正なアドレスを指している。
.TP
\fBEINTR\fP
この呼び出しがシグナルで中断された。
.TP
\fBEIO\fP
ファイルシステムからの読み込みの間に I/O エラーが発生した。
.TP
\fBELOOP\fP
(\fBstatfs\fP() の場合) \fIpath\fP を解決するのに辿るべきシンボリックリンクが多すぎる。
.TP
\fBENAMETOOLONG\fP
(\fBstatfs\fP() の場合) \fIpath\fP が長過ぎる。
.TP
\fBENOENT\fP
(\fBstatfs\fP() の場合) \fIpath\fP によって参照されるファイルが存在しない。
.TP
\fBENOMEM\fP
十分なカーネルメモリーがない。
.TP
\fBENOSYS\fP
ファイルシステムがこの呼び出しをサポートしていない。
.TP
\fBENOTDIR\fP
(\fBstatfs\fP() の場合) \fIpath\fP のディレクトリ部分がディレクトリでない。
.TP
\fBEOVERFLOW\fP
いくつかの値が大き過ぎて、返り値の構造体で表現できない。
.SH 準拠
Linux 固有である。 Linux の \fBstatfs\fP() は 4.4BSD のものに影響を受けている。
(しかし同じ構造体を使用しているわけではない)
.SH 注意
元々の Linux の \fBstatfs\fP() と \fBfstatfs\fP() システムコールは
非常に大きなファイルサイズを念頭に入れて設計されていなかった。
その後、Linux 2.6 で、新しい構造体 \fIstatfs64\fP を使用する
新しいシステムコール \fBstatfs64\fP() と \fBfstatfs64\fP() が追加された。
新しい構造体は元の \fIstatfs\fP 構造体と同じフィールドを持つが、
いろいろなフィールドのサイズが大きなファイルサイズに対応できるように
増やされている。 glibc の \fBstatfs\fP() と \fBfstatfs\fP() のラッパー関数は
カーネルによるこれらの違いを吸収している。
\fI<sys/vfs.h>\fP しか持たないシステムもあり、 \fI<sys/statfs.h>\fP
も持っているシステムもある。 前者は後者をインクルードするので、 前者をインクルードするのが良いと考えられる。
LSB ではライブラリコール \fBstatfs\fP(), \fBfstatfs\fP() を非推奨として、代わりに \fBstatvfs\fP(2),
\fBfstatvfs\fP(2) を使うように指示している。
.SS "f_fsid フィールド"
Solaris, Irix, POSIX にはシステムコール \fBstatvfs\fP(2) があり、 \fIstruct statvfs\fP を返す
(\fI<sys/statvfs.h>\fP で定義されている)。 この構造体には、 \fIunsigned long\fP \fIf_fsid\fP
が含まれている。 Linux, SunOS, HP\-UX, 4.4BSD にはシステムコール \fBstatfs\fP() があり、 \fIstruct
statfs\fP を返す (\fI<sys/vfs.h>\fP で定義されている)。 この構造体には \fIfsid_t\fP \fIf_fsid\fP,
が含まれており、 \fIfsid_t\fP は \fIstruct { int val[2]; }\fP と定義されている。 FreeBSD
でも同じであるが、インクルードファイル \fI<sys/mount.h>\fP を使う。
\fIf_fsid\fP はあるランダムな値を持ち、 (\fIf_fsid\fP,\fIino\fP) という 1 組の値でファイルを一意に決定できるようにする、
というのが基本的な考え方である。 いくつかの OS では、デバイス番号 (の変種) を使ったり、
デバイス番号とファイルシステムタイプを組み合わせて使ったりしている。 OS の中には \fIf_fsid\fP
フィールドの取得をスーパーユーザーに限定しているものもある (非特権ユーザーが取得すると 0 となる)。 NFS でエクスポートされる場合、
このフィールドがファイルシステムのファイルハンドルで使われており、 この値を提供するとセキュリティ上の問題がある。
.LP
いくつかの OS では、 \fIfsid\fP を \fBsysfs\fP(2) システムコールの第 2 引き数として使用できる。
.SH バグ
.\" broken in commit ff0c7d15f9787b7e8c601533c015295cc68329f8
.\" fixed in commit d70ef97baf048412c395bb5d65791d8fe133a52b
Linux 2.6.38 から Linux 3.1 までは (3.1 を含む)、 \fBfstatfs\fP() は \fBpipe\fP(2)
で作成されたファイルディスクリプターに対してはエラー \fBENOSYS\fP で失敗していた。
.SH 関連項目
\fBstat\fP(2), \fBstatvfs\fP(2), \fBpath_resolution\fP(7)
.SH この文書について
この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。
|