statvfs(3) ファイルシステムの統計を取得する

Other Alias

fstatvfs

書式

#include <sys/statvfs.h>

int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, struct statvfs *buf);

説明

関数 statvfs() はマウントされたファイルシステムについての情報を返す。 path はマウントされたファイルシステム中の任意のファイルのパス名である。 buf は、だいたい以下のように定義されている statvfs 構造体へのポインタである:

struct statvfs {
    unsigned long  f_bsize;    /* ファイルシステムのブロックサイズ */
    unsigned long  f_frsize;   /* フラグメントサイズ */
    fsblkcnt_t     f_blocks;   /* ファイルシステムのサイズ (f_frsize 単位) */
    fsblkcnt_t     f_bfree;    /* 解放されているブロック数 */
    fsblkcnt_t     f_bafvail;   /* 非特権ユーザ用に解放されているブロック数 */
    fsfilcnt_t     f_files;    /* inode 数 */
    fsfilcnt_t     f_ffree;    /* 解放されている inode の数 */
    fsfilcnt_t     f_favail;   /* 非特権ユーザ用に解放されている inode の数 */
    unsigned long  f_fsid;     /* ファイルシステム ID */
    unsigned long  f_flag;     /* マウントフラグ */
    unsigned long  f_namemax;  /* ファイル名の長さの最大値 */
};

ここで、型 fsblkcnt_tfsfilcnt_t<sys/types.h> で定義されている。 かつて、これらは共に unsigned long であった。

フィールド f_flag は (マウントフラグの) ビットマスクである (マウントフラグについては、 mount(8) を参照すること)。 POSIX で定義されているビットは以下の通り:

ST_RDONLY
読み込み専用のファイルシステム。
ST_NOSUID
exec(3) に無視される set-user-id/set-group-ID ビット。

返された構造体の全てのメンバが全てのファイルシステムで 意味のある値であるか否かは、指定されていない。

fstatvfs() は、ディスクリプタ fd で参照されるオープンされたファイルについて、同じ情報を返す。

返り値

成功した場合、0 が返される。 失敗した場合、 -1 が返され、 errno に適切な値がセットされる。

エラー

EACCES
(statvfs() の場合) path のディレクトリ部分に検索許可が与えられていない (path_resolution(7) も参照すること)。
EBADF
(fstatvfs() の場合) fd が有効なオープンファイルディスクリプタではない。
EFAULT
buf または path が無効なアドレスを指している。
EINTR
この呼び出しがシグナルで中断された。
EIO
ファイルシステムからの読み込みの間に I/O エラーが発生した。
ELOOP
(statvfs() の場合) path にシンボリックリンクが多すぎる。
ENAMETOOLONG
(statvfs() の場合) path が長すぎる。
ENOENT
(statvfs() の場合) path で参照されるファイルが存在しない。
ENOMEM
十分なカーネルメモリがない。
ENOSYS
ファイルシステムがこの呼び出しをサポートしていない。
ENOTDIR
(statvfs() の場合) path のディレクトリ部分がディレクトリでない。
EOVERFLOW
いくつかの値が大き過ぎて、返り値の構造体で表現できない。

属性

マルチスレッディング (pthreads(7) 参照)

関数 statvfs() と fstatvfs()はスレッドセーフである。

準拠

POSIX.1-2001.

注意

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

現在の glibc の実装において、

   pathconf(path, _PC_REC_XFER_ALIGN);
   pathconf(path, _PC_ALLOC_SIZE_MIN);
   pathconf(path, _PC_REC_MIN_XFER_SIZE);

は、それぞれ statvfs(path,buf) の返り値の f_frsize, f_frsize, f_bsize フィールドを使う。

この文書について

この man ページは Linux man-pages プロジェクトのリリース 3.65 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。