kazmax - Linux で自宅サーバー

statfs - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 書式
  4. 返り値
  5. エラー
  6. 準拠
  7. 注意
  8. 関連項目

名前

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 はマウントされたファイル・システムにあるファイルのパス名である。 bufstatfs 構造体へのポインターで、およそ以下のように定義される:

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 では、 fsidsysfs ()システムコールの第 2 引き数として使用できる。

関連項目