STATFS(2)

名称
statfs - ファイルシステムの統計を入手

ライブラリ
libc

書式
<sys/param.h> <sys/mount.h> int statfs(const char *path, struct statfs *buf) int fstatfs(int fd, struct statfs *buf)

解説
statfs() は、マウントされているファイルシステムの情報を戻します。 path は、マウントされているファイルシステム内の任意のファイルのパス名です。 buf は、以下のように定義 されている statfs() の構造体のポインタです。

    typedef struct fsid { int32_t val[2]; } fsid_t; /* ファイルシステム ID 型 */
    /*
     * ファイルシステム統計
     */
    #define MFSNAMELEN 16	/* ヌルを含むファイルシステム名の長さ */
    #define MNAMELEN   90	/* 戻り値の用のバッファの長さ */
    struct statfs {
    long	f_bsize;	  /* ファイルシステムのブロックサイズ */
    long	f_iosize;	  /* 最適なトランスファーブロックサイズ */
    long	f_blocks;	  /* ファイルシステム上の合計ブロックサイズ */
    long	f_bfree;	  /* ファイルシステム上の利用可能なブロック */
    long	f_bavail;	  /* スーパユーザ以外が利用可能なブロック */
    long	f_files;	  /* ファイルシステム上の合計ノード数 */
    long	f_ffree;	  /* ファイルシステム上の利用可能なノード数 */
    fsid_t	f_fsid;		  /* ファイルシステム ID 番号 */
    uid_t	f_owner;	  /* ファイルシステムをマウントしたユーザ */
    int	f_type;		  /* ファイルシステムのタイプ */
    int	f_flags;	  /* マウントフラッグのコピー */
    long    f_syncwrites;	  /* マウントしてからの同期書き込み数 */
    long    f_asyncwrites;	  /* マウントしてからの非同期書き込み数 */
    char	f_fstypename[MFSNAMELEN];/* ファイルシステムタイプ名 */
    char	f_mntonname[MNAMELEN];	 /* マウントポイント */
    long    f_syncreads;		 /* マウント以降の同期読み取り数 */
    long    f_asyncreads;		 /* マウント以降の非同期読み取り数 */
    char	f_mntfromname[MNAMELEN];	/* マウントされたファイルシステム */
    };

戻される可能性があるフラグは以下のとおりです。

MNT_RDONLY
    ファイルシステムが読取り専用でマウント されています。スーパユーザでも書込めません。

MNT_NOEXEC
    そのファイルシステムからファイルを実行できません。

MNT_NOSUID
    ファイルの setuid ビットと setgid ビットが、 ファイルの実行時に受け入れられません。

MNT_NODEV
    ファイルシステムの特殊ファイルを開けません。

MNT_SYNCHRONOUS
    ファイルシステムへのすべての入出力が、 同期を取って実行されます。

MNT_ASYNC
    ファイルシステムの入出力が、同期を取って実行されません。

MNT_LOCAL
    ファイルシステムがローカルに常駐しています。

MNT_QUOTA
    ファイルシステムでクォータが有効になっています。

MNT_ROOTFS
    ルートファイルシステムを確認します。

MNT_EXRDONLY
    ファイルシステムが、読取り専用でエクスポートされます。

MNT_EXPORTED
    ファイルシステムが、読み書きの両方でエクスポートされます。

MNT_DEFEXPORTED
    ファイルシステムが、読み書きの両方で 任意のインターネットホストにエクスポートされます。

MNT_EXPORTANON
    ファイルシステムが、すべてのリモートアクセスを 匿名ユーザにマップします。

MNT_EXKERB
    ファイルシステムが、Kerberos uid マッピングでエクスポートされます。

特定のファイルシステムで定義されていないフィールドは、 -1 に設定されます。 fstatfs() は、記述子 fd で参照されるオープンファイルに対して同じ情報を戻します。

戻り値

エラー
statfs() は、以下のうちの 1 つ以上が真である場合にエラーとなります。

[ENOTDIR]
    path のパスの構成要素中にディレクトリ以外のものが含まれています。

[ENAMETOOLONG]
    path の構成要素が 255 文字を越えているか、または path 全体が 1023 文字を越えています。

[ENOENT]
    path の参照するファイルが存在しません。

[EACCES]
    path には、検索が許可されていないディレクトリが含まれています。

[ELOOP]
    path を変換するときに検出されたシンボリックリンクが多すぎます。

[EFAULT]
    buf か path が、不正なアドレスを指しています。

[EIO]
    ファイルシステムに読み書きしている間に入出力エラーが発生しました。

fstatfs() は、以下のうち 1 つ以上が真である場合にエラーとなります。

[EBADF]
    fd が有効オープンファイル記述子ではありません。

[EFAULT]
    buf が不正なアドレスを指しています。

[EIO]
    ファイルシステムに読み書きしている間に I/O (入出力) エラーが発生しました。

歴史
statfs() 関数は、 4.4BSD ではじめて登場しました。