statfs

Autres langues

Langue: ja

Version: 2004-06-23 (mandriva - 01/05/08)

Section: 2 (Appels système)

名前

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(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 のものに影響を受けている。 (しかし同じ構造体を使用しているわけではない)

注意

このライブラリコールをサポートするため、 カーネルにはシステムコール statfs(), fstatfs(), statfs64(), fstatfs64() がある。

<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 引き数として使用できる。

関連項目

stat(2), statvfs(2), path_resolution(7)