STATVFS(3)

ИМЯ
statvfs, 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_bavail;   /* количество свободных блоков
                                  для непривилегированных пользователей */
    fsfilcnt_t     f_files;    /* количество inodes */
    fsfilcnt_t     f_ffree;    /* количество свободных inodes */
    fsfilcnt_t     f_favail;   /* количество свободных inodes для
                                  непривилегированных пользователей */
    unsigned long  f_fsid;     /* идентификатор файловой системы */
    unsigned long  f_flag;     /* параметры монтирования */
    unsigned long  f_namemax;  /* максимальная длина имени файла */
};
Типы fsblkcnt_t и fsfilcnt_t определены в файле <sys/types.h>. Для их определения используется тип unsigned long. Поле f_flag является битовой маской (из параметров монтирования, см. mount(8)). Биты определены, согласно POSIX, следующим образом:

ST_RDONLY
    Файловая система доступна только на чтение.

ST_NOSUID
    Биты Set-user-ID/set-group-ID игнорируются для exec(3).

Не указывается, будут ли при любых файловых системах членам возвращаемой структуры присвоены осмысленные данные. fstatvfs() возвращает такую же информацию об открытом файле через его ссылку на дескриптор fd.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.

ОШИБКИ

EACCES
    (statvfs()) Нет права на поиск одного из компонентов префикса пути path (см. также path_resolution(7)).

EBADF
    (fstatvfs()) fd не является корректным открытым дескриптором файла.

EFAULT
    Buf или path указывает на неправильный адрес.

EINTR
    Данный вызов был прерван сигналом.

EIO При чтении файловой системы произошла ошибка ввода-вывода.

ELOOP
    (statvfs()) Было обнаружено слишком много символьных ссылок при трансляции path.

ENAMETOOLONG
    (statvfs()) Слишком длинное значение аргумента path.

ENOENT
    (statvfs()) Файл, указанный в path, не существует.

ENOMEM
    Недостаточное количество памяти ядра.

ENOSYS
    Файловая система не поддерживает данный вызов.

ENOTDIR
    (statvfs()) Один из компонентов префикса пути path не является каталогом.

EOVERFLOW
    Некоторые значения слишком велики, чтобы быть представленными в возвращаемой структуре.

СООТВЕТСТВИЕ СТАНДАРТАМ
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);

используют, соответственно, поля f_frsize, f_frsize и f_bsize из возвращаемого значения statvfs(path,buf).

СМОТРИТЕ ТАКЖЕ
statfs(2)