Linux
2017-09-15
Aliases: fstatvfs(2), fstatvfs(2), fstatvfs(2), fstatvfs(2), fstatvfs(2), fstatvfs(2), statvfs(2), statvfs(2), statvfs(2), statvfs(2), statvfs(2), statvfs(2), fstatvfs(3), fstatvfs(3), fstatvfs(3), fstatvfs(3), fstatvfs(3), fstatvfs(3)
man-pages-ru
Russian man pages from the Linux Documentation Project
manpages-dev
Manual pages about using GNU/Linux for development
man-pages
Linux kernel and C library user-space interface documentation
ИМЯ
statvfs, fstatvfs - получение статистики по файловой системе
ОБЗОР
#include <sys/statvfs.h>
int statvfs(const char *path, struct statvfs *buf);
int fstatvfs(int fd, 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; /* максимальная длина имени файла */ };
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 — битовая маска различных параметров, которые были указаны при монтировании этой файловой системы. В нём содержится ноль или несколько следующих флагов:
ST_MANDLOCK | |
Разрешена обязательная (mandatory) блокировка файловой системы (смотрите fcntl(2)). | |
ST_NOATIME | |
Не обновлять времена доступа; смотрите mount(2). | |
ST_NODEV | |
Запретить доступ к специальным файлам устройств в этой файловой системе. | |
ST_NODIRATIME | |
Не обновлять времена доступа к каталогам; смотрите mount(2). | |
ST_NOEXEC | |
Исполнение программ в этой файловой системе запрещено. | |
ST_NOSUID | |
Биты set-user-ID и set-group-ID игнорируются в exec(3) для исполняемых файлов в этой файловой системе. | |
ST_RDONLY | |
Файловая система смонтирована в режиме только для чтения. | |
ST_RELATIME | |
Обновлять atime относительно mtime/ctime; смотрите mount(2). | |
ST_SYNCHRONOUS | |
Выполнять синхронную запись в файловую систему немедленно (смотрите описание O_SYNC в open(2)). |
fstatvfs() возвращает такую же информацию об открытом файле через его ссылку на дескриптор fd.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ
EACCES | (statvfs()) Нет права на поиск одного из компонентов префикса пути path (см. также path_resolution(7)). |
EBADF | (fstatvfs()) fd не является корректным открытым дескриптором файла. |
EFAULT | Buf или path указывает на неправильный адрес. |
EINTR | Данный вызов был прерван сигналом; смотрите signal(7). |
EIO | При чтении файловой системы произошла ошибка ввода-вывода. |
ELOOP | (statvfs()) Было обнаружено слишком много символьных ссылок при трансляции path. |
ENAMETOOLONG | |
(statvfs()) Слишком длинное значение аргумента path. | |
ENOENT | (statvfs()) Файл, указанный в path, не существует. |
ENOMEM | Недостаточное количество памяти ядра. |
ENOSYS | Файловая система не поддерживает данный вызов. |
ENOTDIR | |
(statvfs()) Один из компонентов префикса пути path не является каталогом. | |
EOVERFLOW | |
Некоторые значения слишком велики, чтобы быть представленными в возвращаемой структуре. |
АТРИБУТЫ
Описание терминов данного раздела смотрите в attributes(7).
Интерфейс | Атрибут | Значение |
statvfs(), fstatvfs() | Безвредность в нитях | MT-Safe |
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.
В POSIX.1 в поле f_flag определены только флаги ST_NOSUID и ST_RDONLY. Чтобы получить определения остальных флагов нужно определить _GNU_SOURCE.
ЗАМЕЧАНИЯ
Для поддержки данной библиотечной функции в ядре Linux есть системные вызовы statfs(2) и fstatfs(2).
В версиях glibc до 2.13, statvfs() заполняла биты поля f_flag сканируя параметры монтирования в /proc/mounts. Однако начиная с Linux 2.6.36, нижележащий системный вызов statfs(2) предоставляет необходимую информацию через поле f_flags, и начиная с glibc версии 2.13, функция statvfs() будет использовать информацию из этого поля, а не сканируя /proc/mounts.
Реализации функций в 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.