struct statvfs

Структура, характеризующая информацию о файловой системе

Прототип:

#include <sys/statvfs.h>
typedef uint64_t fsblkcnt64_t;
typedef uint64_t fsfilcnt64_t;
#if _FILE_OFFSET_BITS - 0 == 64
typedef uint64_t fsblkcnt_t;
typedef uint64_t fsfilcnt_t;
#elif !defined _FILE_OFFSET_BITS || _FILE_OFFSET_BITS - 0 == 32
typedef uint32_t fsblkcnt_t;
typedef uint32_t fsfilcnt_t;
#endif
struct statvfs {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fundamental filesystem block size */
#if _FILE_OFFSET_BITS - 0 == 64
fsblkcnt_t f_blocks; /* total number of blocks on file system in units of f_frsize */
fsblkcnt_t f_bfree; /* total number of free blocks */
fsblkcnt_t f_bavail; /* number of free blocks available to non-privileged process */
fsfilcnt_t f_files; /* total number of file serial numbers */
fsfilcnt_t f_ffree; /* total number of free file serial numbers */
fsfilcnt_t f_favail; /* number of file serial numbers available to non-privileged process */
#elif !defined(_FILE_OFFSET_BITS) || _FILE_OFFSET_BITS == 32
# if defined(__LITTLEENDIAN__)
fsblkcnt_t f_blocks; /* total number of blocks on file system in units of f_frsize */
fsblkcnt_t f_blocks_hi;
fsblkcnt_t f_bfree; /* total number of free blocks */
fsblkcnt_t f_bfree_hi;
fsblkcnt_t f_bavail; /* number of free blocks available to non-privileged process */
fsblkcnt_t f_bavail_hi;
fsfilcnt_t f_files; /* total number of file serial numbers */
fsfilcnt_t f_files_hi;
fsfilcnt_t f_ffree; /* total number of free file serial numbers */
fsfilcnt_t f_ffree_hi;
fsfilcnt_t f_favail; /* number of file serial numbers available to non-privileged process */
fsfilcnt_t f_favail_hi;
# elif defined(__BIGENDIAN__)
fsblkcnt_t f_blocks_hi;
fsblkcnt_t f_blocks; /* total number of blocks on file system in units of f_frsize */
fsblkcnt_t f_bfree_hi;
fsblkcnt_t f_bfree; /* total number of free blocks */
fsblkcnt_t f_bavail_hi;
fsblkcnt_t f_bavail; /* number of free blocks available to non-privileged process */
fsfilcnt_t f_files_hi;
fsfilcnt_t f_files; /* total number of file serial numbers */
fsfilcnt_t f_ffree_hi;
fsfilcnt_t f_ffree; /* total number of free file serial numbers */
fsfilcnt_t f_favail_hi;
fsfilcnt_t f_favail; /* number of file serial numbers available to non-privileged process */
# else
# error endian not configured for system
# endif
#else
# error _FILE_OFFSET_BITS value is unsupported
#endif
unsigned long f_fsid; /* file system id */
char f_basetype[16]; /* null terminated name of target file system*/
unsigned long f_flag; /* bit mask of f_flag values */
unsigned long f_namemax; /* maximum filename length */
unsigned long f_filler[21]; /* padding */
};
#if _LARGEFILE64_SOURCE - 0 > 0
struct statvfs64 {
unsigned long f_bsize; /* file system block size */
unsigned long f_frsize; /* fundamental filesystem block size */
fsblkcnt64_t f_blocks; /* total number of blocks on file system in units of f_frsize */
fsblkcnt64_t f_bfree; /* total number of free blocks */
fsblkcnt64_t f_bavail; /* number of free blocks available to non-privileged process */
fsfilcnt64_t f_files; /* total number of file serial numbers */
fsfilcnt64_t f_ffree; /* total number of free file serial numbers */
fsfilcnt64_t f_favail; /* number of file serial numbers available to non-privileged process */
unsigned long f_fsid; /* file system id */
char f_basetype[16]; /* null terminated name of target file system*/
unsigned long f_flag; /* bit mask of f_flag values */
unsigned long f_namemax; /* maximum filename length */
unsigned long f_filler[21]; /* padding */
};
#endif

Описание:

Тип определяет информацию о файловой системе для некоторого файла или файлового дескриптора. Структура включает следующие поля:

f_bsize
Предпочтительный размер блока файловой системы.
f_frsize
Основной размер блока файловой системы (если поддерживается)
f_blocks
Общее количество блоков в файловой системе, в единицах f_frsize.
f_bfree
Общее количество свободных блоков.
f_bavail
Количество свободных блоков, доступных пользователям, отличным от root.
f_files
Общее количество индексных дескрипторов (inodes).
f_ffree
Общее количество свободных индексных дескрипторов.
f_favail
Число индексных дескрипторов, доступных пользователям, отличным от root.
f_fsid
Идентификатор файловой системы (в настоящее время идентификатор устройства).
f_basetype
Тип целевой файловой системы в виде строки с завершающим нулем.
f_flag
Битовая маска флагов; функция может установить данные флаги (биты _MOUNT_* и ST_* эквивалентны):
MOUNT_* ST_* Значение
_MOUNT_READONLY ST_RDONLY Файловая система доступна только для чтения.
_MOUNT_NOEXEC ST_NOEXEC Файловая система не разрешает загрузку исполняемых файлов.
_MOUNT_NOSUID ST_NOSUID Файловая система не поддерживает семантику setuid() и setgid().
_MOUNT_NOCREAT ST_NOCREAT В файловой системе невозможно создавать файлы.
_MOUNT_OFF32 ST_OFF32 Тип off_t ограничен 32 битами.
_MOUNT_NOATIME ST_NOATIME Файловая система не поддерживает протоколирование времени доступа к файлам.
f_namemax
Максимальная длина имени файла.

Значения, возвращаемые для f_files, f_ffree и f_favail, зависят от файловой системы:

fs-dos.so
fs-qnx4.so
У данных файловых систем индексные дескрипторы встроены в каталоги, поэтому количество файлов ограничено объемом дискового пространства, следовательно, по сути, ограничений нет. Кроме того, данные ФС не учитывают количество созданных файлов, поэтому для всех этих полей устанавливается значение 0.
fs-qnx6.so
fs-etfs-ram
fs-ext2.so
Данные файловые системы имеют фиксированную таблицу индексных дескрипторов, поэтому поля структуры заполняются.
fs-cd.so
fs-mac.so
fs-nt.so
fs-udf.so
Файловые системы, доступные только для чтения, всегда устанавливают f_ffree и f_favail в 0. Там, где это возможно или известно, устанавливается f_files:
fs-cifs
Файловая система CIFS устанавливает данные поля в 0.
devf-*
Драйверы файловой системы флэш-памяти оценивают значения данных полей в зависимости от объема свободного пространства.

Классификация:

struct statvfs — POSIX 1003.1 X/Open Systems Interfaces Extension; struct statvfs64 — Поддержка больших файлов

Тематические ссылки:

fs-cd.so, fs-mac.so, fs-nt.so, fs-udf.so, fstatvfs(), fstatvfs64(), statvfs(), statvfs64()




Предыдущий раздел: Описание API системной библиотеки