statfs - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 書式
- 返り値
- エラー
- 準拠
- 注意
- 関連項目
名前
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
構造体へのポインターで、およそ以下のように定義される:
struct statfs {
long f_type; /* ファイルシステムの型 (下記参照) */
long f_bsize; /* 最適なブロックサイズ */
long f_blocks; /* ファイルシステムの総データブロック数 */
long f_bfree; /* ファイルシステムの空きブロック数 */
long f_bavail; /* 非スーパーユーザが使用可能な空きブロック数 */
long f_files; /* ファイルシステムの総ファイルノード数 */
long f_ffree; /* ファイルシステムの空きファイルノード数 */
fsid_t f_fsid; /* ファイルシステムの ID */
long f_namelen; /* ファイル名の最大長 */
};
ファイル・システムの型:
ADFS_SUPER_MAGIC 0xadf5
AFFS_SUPER_MAGIC 0xADFF
BEFS_SUPER_MAGIC 0x42465331
BFS_MAGIC 0x1BADFACE
CIFS_MAGIC_NUMBER 0xFF534D42
CODA_SUPER_MAGIC 0x73757245
COH_SUPER_MAGIC 0x012FF7B7
CRAMFS_MAGIC 0x28cd3d45
DEVFS_SUPER_MAGIC 0x1373
EFS_SUPER_MAGIC 0x00414A53
EXT_SUPER_MAGIC 0x137D
EXT2_OLD_SUPER_MAGIC 0xEF51
EXT2_SUPER_MAGIC 0xEF53
EXT3_SUPER_MAGIC 0xEF53
HFS_SUPER_MAGIC 0x4244
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 文字ファイル名 */
MSDOS_SUPER_MAGIC 0x4d44
NCP_SUPER_MAGIC 0x564c
NFS_SUPER_MAGIC 0x6969
NTFS_SB_MAGIC 0x5346544e
OPENPROM_SUPER_MAGIC 0x9fa1
PROC_SUPER_MAGIC 0x9fa0
QNX4_SUPER_MAGIC 0x002f
REISERFS_SUPER_MAGIC 0x52654973
ROMFS_MAGIC 0x7275
SMB_SUPER_MAGIC 0x517B
SYSV2_SUPER_MAGIC 0x012FF7B6
SYSV4_SUPER_MAGIC 0x012FF7B5
TMPFS_MAGIC 0x01021994
UDF_SUPER_MAGIC 0x15013346
UFS_MAGIC 0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
VXFS_SUPER_MAGIC 0xa501FCF5
XENIX_SUPER_MAGIC 0x012FF7B4
XFS_SUPER_MAGIC 0x58465342
_XIAFS_SUPER_MAGIC 0x012FD16D
f_fsid
にどんな値が入るべきなのかは誰も知らない (但し、下記を参照)。
それぞれのファイル・システムにおいて未定義のフィールドには 0 が
設定される。
fstatfs
()はディスクリプター
fd
によって参照されるオープンされたファイルについて、同じ情報を返す。
返り値
成功すれば 0 が返される。エラーの場合は -1 が返され、
errno
が適切に設定される。
エラー
-
EACCES
-
(
statfs
()の場合)
path
のディレクトリ部分に検索許可が与えられていない
(
path_resolution
(2)も参照すること)。
-
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 の
statfs
()は 4.4BSD のものに影響を受けている。
(しかし同じ構造体を使用しているわけではない)
注意
このライブラリコールをサポートするため、
カーネルにはシステムコール
statfs
(),
fstatfs
(),
statfs64
(),
fstatfs64
()がある。
<sys/vfs.h> しか持たないシステムもあり、
<sys/statfs.h> も持っているシステムもある。
前者は後者をインクルードするので、
前者をインクルードするのが良いと考えられる。
LSB ではライブラリコール
statfs
(),
fstatfs
()を非推奨として、代わりに
statvfs
(),
statvfs
()を使うように指示している。
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 引き数として使用できる。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする