EN JA
STATFS(2)
STATFS(2) FreeBSD System Calls Manual STATFS(2)

名称

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

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/param.h>
#include < 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_SYNCHRONOUS
ファイルシステムへのすべての入出力が、同期を取って実行されます。
MNT_ASYNC
ファイルシステムの入出力が、同期を取って実行されません。
MNT_SOFTDEP
ソフトアップデートが動作します ( ffs(7) を参照してください)。
MNT_GJOURNAL
gjournal でのジャーナル処理は、有効にされます ( gjournal(8) 参照)。
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 で参照されるオープンファイルに対して同じ情報を戻します。

戻り値

Upon successful completion, the value 0 is returned; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

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 (入出力) エラーが発生しました。

関連項目

fhstatfs(2)

歴史

statfs() システムコールは、 4.4BSD ではじめて登場しました。
November 1, 2006 FreeBSD