Структура, характеризующая информацию о файловой системе
#include <sys/statvfs.h>typedef uint64_t fsblkcnt64_t;typedef uint64_t fsfilcnt64_t;#if _FILE_OFFSET_BITS - 0 == 64typedef uint64_t fsblkcnt_t;typedef uint64_t fsfilcnt_t;#elif !defined _FILE_OFFSET_BITS || _FILE_OFFSET_BITS - 0 == 32typedef uint32_t fsblkcnt_t;typedef uint32_t fsfilcnt_t;#endifstruct statvfs {unsigned long f_bsize; /* file system block size */unsigned long f_frsize; /* fundamental filesystem block size */#if _FILE_OFFSET_BITS - 0 == 64fsblkcnt_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#endifunsigned 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 > 0struct 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
Тип определяет информацию о файловой системе для некоторого файла или файлового дескриптора. Структура включает следующие поля:
_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_files, f_ffree и f_favail, зависят от файловой системы:
0
. 0
. Там, где это возможно или известно, устанавливается f_files: 0
0
0
. 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 системной библиотеки