Provided by: manpages-ja-dev_0.5.0.0.20180315+dfsg-1_all bug

名前

       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  構造体へのポインターで、お
       よそ以下のように定義される:

           #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_tstruct { int val[2]; } と定義されている。 FreeBSD  でも同じであるが、インクルードファイ
       ル <sys/mount.h> を使う。

       f_fsid  はあるランダムな値を持ち、 (f_fsid,ino)  という 1 組の値でファイルを一意に決定でき
       るようにする、 というのが基本的な考え方である。 いくつかの OS では、デバイス番号  (の変種)
       を使ったり、  デバイス番号とファイルシステムタイプを組み合わせて使ったりしている。 OS の中
       には f_fsid フィールドの取得をスーパーユーザーに限定しているものもある (非特権ユーザーが取
       得すると 0 となる)。 NFS でエクスポートされる場合、 このフィールドがファイルシステムのファ
       イルハンドルで使われており、 この値を提供するとセキュリティ上の問題がある。

       いくつかの OS では、 fsidsysfs(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/ に書かれている。