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		/* 戻り値の用のバッファの長さ */
    #define	STATFS_VERSION	0x20030518	/* 現在のバージョン番号 */
    struct statfs {
    uint32_t f_version;		/* 構造体のバージョン番号 */
    uint32_t f_type;		/* ファイルシステムのタイプ */
    uint64_t f_flags;		/* マウントフラグのコピー */
    uint64_t f_bsize;		/* ファイルシステムの断片サイズ */
    uint64_t f_iosize;		/* 最適な転送ブロックサイズ */
    uint64_t f_blocks;		/* ファイルシステム上の合計データブロックサイズ */
    uint64_t f_bfree;		/* ファイルシステム上の利用可能なブロック */
    int64_t	 f_bavail;		/* スーパユーザ以外が利用可能なブロック */
    uint64_t f_files;		/* ファイルシステム上の合計ノード数 */
    int64_t	 f_ffree;		/* スーパユーザ以外が利用可能なノード数 */
    uint64_t f_syncwrites;		/* マウントしてからの同期書込み数 */
    uint64_t f_asyncwrites;		/* マウントしてからの非同期書込み数 */
    uint64_t f_syncreads;		/* マウントしてからの同期読取り数 */
    uint64_t f_asyncreads;		/* マウントしてからの非同期読取り数 */
    uint64_t f_spare[10];		/* 未使用領域 */
    uint32_t f_namemax;		/* ファイル名の長さの最大 */
    uid_t	  f_owner;		/* ファイルシステムをマウントしたユーザ */
    fsid_t	  f_fsid;		/* ファイルシステム ID */
    char	  f_charspare[80];	    /* 後のための余白 */
    char	  f_fstypename[MFSNAMELEN]; /* ファイルシステムのタイプ名 */
    char	  f_mntfromname[MNAMELEN];  /* マウントされたファイルシステム */
    char	  f_mntonname[MNAMELEN];    /* このディレクトリにマウント */
    };

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

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

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

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

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

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

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

MNT_SOFTDEP
    ソフトアップデートが動作します ((ffs) 7 を参照してください)。

MNT_SUIDDIR
    ディレクトリの SUID ビットを特別に取り扱います。

MNT_UNION
    下層のファイルシステムとのユニオン。

MNT_NOSYMFOLLOW
    シンボリックリンクを辿りません。

MNT_NOCLUSTERR
    読み取りクラスタリングが無効になっています。

MNT_NOCLUSTERW
    書き込みクラスタリングが無効になっています。

MNT_MULTILABEL
    各オブジェクトに対する Mandatory Access Control (MAC) サポート ((mac) 4 を参照してください)。

MNT_ACLS
    Access Control List (ACL) サポートが有効になっています。

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

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

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

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

MNT_NOATIME
    ファイルアクセス時刻の更新が無効になっています。

MNT_USER
    ファイルシステムがユーザによってマウントされています。

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

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

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

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

MNT_EXPUBLIC
    ファイルシステムが、一般公開されています (WebNFS)。

特定のファイルシステムで定義されていないフィールドは、-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 ではじめて登場しました。