Главная » 2017 » Ноябрь » 19 » man 2 fstatfs
22:09
man 2 fstatfs

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


statfs, fstatfs - возвращает статистику по файловой системе



ОБЗОР


#include <sys/vfs.h> /* или <sys/statfs.h> */

int statfs(const char *path, struct statfs *buf);
int fstatfs(int fd, struct statfs *buf);



ОПИСАНИЕ


Системный вызов statfs() возвращает информацию о смонтированной файловой системе.
Значение path является путём любого файла, расположенного в смонтированной
файловой системе. Значение buf является указателем на структуру statfs,
определённую, примерно, следующим образом:

struct statfs {
__fsword_t f_type; /* тип файловой системы (смотрите далее) */
__fsword_t f_bsize; /* оптимальный размер пересылаемых блоков */
fsblkcnt_t f_blocks; /* общее количество блоков данных
в файловой системе */
fsblkcnt_t f_bfree; /* свободных блоков в файловой системе */
fsblkcnt_t f_bavail; /* свободных блоков, доступных
непривилегированному пользователю */
fsfilcnt_t f_files; /* общее количество файловых нод
в файловой системе */
fsfilcnt_t f_ffree; /* свободных файловых нод в файловой системе */
fsid_t f_fsid; /* ID файловой системы */
__fsword_t f_namelen; /* максимальная длина имён файлов */
__fsword_t f_frsize; /* размер фрагмента (начиная с Linux 2.6) */
__fsword_t f_flags; /* флаги монтирования файловой системы
(начиная с Linux 2.6.36) */
__fsword_t f_spare[xxx];
/* дополняющие байты, зарезервированные для будущего
использования */
};

В f_type могут быть указаны следующие типы файловых систем:

ADFS_SUPER_MAGIC 0xadf5
AFFS_SUPER_MAGIC 0xadff
AFS_SUPER_MAGIC 0x5346414f
ANON_INODE_FS_MAGIC 0x09041934 /* ФС анонимных инод (для
псевдофайлов без имени;
например, epoll, signalfd, bpf) */
AUTOFS_SUPER_MAGIC 0x0187
BDEVFS_MAGIC 0x62646576
BEFS_SUPER_MAGIC 0x42465331
BFS_MAGIC 0x1badface
BINFMTFS_MAGIC 0x42494e4d
BPF_FS_MAGIC 0xcafe4a11
BTRFS_SUPER_MAGIC 0x9123683e
BTRFS_TEST_MAGIC 0x73727279
CGROUP_SUPER_MAGIC 0x27e0eb /* псевдофайловая система cgroup */
CGROUP2_SUPER_MAGIC 0x63677270 /* псевдофайловая система cgroup v2 */
CIFS_MAGIC_NUMBER 0xff534d42
CODA_SUPER_MAGIC 0x73757245
COH_SUPER_MAGIC 0x012ff7b7
EXT2_SUPER_MAGIC 0xef53
EXT3_SUPER_MAGIC 0xef53
EXT4_SUPER_MAGIC 0xef53
F2FS_SUPER_MAGIC 0xf2f52010
FUSE_SUPER_MAGIC 0x65735546
FUTEXFS_SUPER_MAGIC 0xbad1dea /* не используется */
HFS_SUPER_MAGIC 0x4244
HOSTFS_SUPER_MAGIC 0x00c0ffee
HPFS_SUPER_MAGIC 0xf995e849
HUGETLBFS_MAGIC 0x958458f6
ISOFS_SUPER_MAGIC 0x9660
JFFS2_SUPER_MAGIC 0x72b6
JFS_SUPER_MAGIC 0x3153464a
MINIX_SUPER_MAGIC 0x137f /* первая ФС minix */
MINIX_SUPER_MAGIC2 0x138f /* 30-символьная ФС minix */
MINIX2_SUPER_MAGIC 0x2468 /* ФС minix V2 */
MINIX2_SUPER_MAGIC2 0x2478 /* ФС minix V2, имена 30 символов */
MINIX3_SUPER_MAGIC 0x4d5a /* ФС minix V3, имена 60 символов */
MQUEUE_MAGIC 0x19800202 /* ФС очереди сообщений POSIX */
MSDOS_SUPER_MAGIC 0x4d44
MTD_INODE_FS_MAGIC 0x11307854
NCP_SUPER_MAGIC 0x564c
NFS_SUPER_MAGIC 0x6969
NILFS_SUPER_MAGIC 0x3434
NSFS_MAGIC 0x6e736673
NTFS_SB_MAGIC 0x5346544e
OCFS2_SUPER_MAGIC 0x7461636f
OPENPROM_SUPER_MAGIC 0x9fa1
OVERLAYFS_SUPER_MAGIC 0x794c7630
PIPEFS_MAGIC 0x50495045
PROC_SUPER_MAGIC 0x9fa0 /* ФС /proc */
PSTOREFS_MAGIC 0x6165676c
QNX4_SUPER_MAGIC 0x002f
QNX6_SUPER_MAGIC 0x68191122
RAMFS_MAGIC 0x858458f6
REISERFS_SUPER_MAGIC 0x52654973
ROMFS_MAGIC 0x7275
SECURITYFS_MAGIC 0x73636673
SELINUX_MAGIC 0xf97cff8c
SMACK_MAGIC 0x43415d53
SMB_SUPER_MAGIC 0x517b
SOCKFS_MAGIC 0x534f434b
SQUASHFS_MAGIC 0x73717368
SYSFS_MAGIC 0x62656572
SYSV2_SUPER_MAGIC 0x012ff7b6
SYSV4_SUPER_MAGIC 0x012ff7b5
TMPFS_MAGIC 0x01021994
TRACEFS_MAGIC 0x74726163
UDF_SUPER_MAGIC 0x15013346
UFS_MAGIC 0x00011954
USBDEVICE_SUPER_MAGIC 0x9fa2
V9FS_MAGIC 0x01021997
VXFS_SUPER_MAGIC 0xa501fcf5
XENFS_SUPER_MAGIC 0xabba1974
XENIX_SUPER_MAGIC 0x012ff7b4
XFS_SUPER_MAGIC 0x58465342
_XIAFS_SUPER_MAGIC 0x012fd16d /* Linux 2.0 и старее */
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)).

Значение f_fsid до конца не определено (но смотрите далее).

Если поле не определёно для какой-то файловой системы, то его значение
устанавливается в 0.

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



ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ


При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno
устанавливается в соответствующее значение.



ОШИБКИ


EACCES (statfs()) В одном из каталогов префикса пути path не разрешён поиск (см.
также path_resolution(7)).

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

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

EINTR Вызов был прерван каким-либо сигналом. Смотрите signal(7).

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

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

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

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



СООТВЕТСТВИЕ СТАНДАРТАМ


Есть только в Linux. Вызов statfs() основан на подобном из 4.4BSD (но они
используют разные структуры).



ЗАМЕЧАНИЯ


Тип __fsword_t, используемый для различных полей в определении структуры statfs,
является встроенным типом glibc и не предназначен для использования вовне. Это
подкидывает загадку программисту, который хочет скопировать или сравнить эти поля
с локальными переменными в программе. В большинстве систем для переменных в этих
случаях допустимо использовать тип unsigned int.

Первые версии системных вызовов Linux statfs() и fstatfs() разрабатывались без
учёта огромных размеров файлов. В последствии, в Linux 2.6 были добавлены
системные вызовы statfs64() и fstatfs64(), в которых используется новая структура,
statfs64. Новая структура содержит те же поля что и первоначальная структура
statfs, но размеры некоторых полей были увеличены для учёта огромных размеров
файлов. Обёрточные функции в glibc statfs() и fstatfs() прозрачно скрывают это
различие ядер.

В одних системах есть только файл <sys/vfs.h>, в других также есть файл
<sys/statfs.h>, при чём первый включает последний. Поэтому, вероятно, лучше
включать первый.

В LSB библиотечные вызовы statfs() и fstatfs() помечены как устаревшие, вместе них
предлагается использовать statvfs(2) и fstatvfs(2).

Поле f_fsid
В Solaris, Irix и POSIX имеется системный вызов statvfs(2), который возвращает
struct statvfs (определена в <sys/statvfs.h>), и в ней содержится поле unsigned
long f_fsid. В Linux, SunOS, HP-UX, 4.4BSD имеется системный вызов statfs(),
который возвращает struct statfs (определена в <sys/vfs.h>), и в ней содержится
fsid_t f_fsid, где тип fsid_t определён как struct { int val[2]; }. Того же
придерживается FreeBSD, за исключением того, что в ней используется включаемый
файл <sys/mount.h>.

Общая идея в том, что в f_fsid содержится какая-то произвольная информация,
например пара (f_fsid,ino) уникально определяющая файл. В некоторых операционных
системах для этого используется номер устройства (один из вариантов) или номер
устройства вместе с типом файловой системы. В других ОС поле f_fsid доступно
только суперпользователю (и равно нулю для остальных пользователей), так как это
поле используется в файловом указателе (filehandle) файловой системы при экспорте
NFS, и выдача его значения влияет на безопасность.

В некоторых ОС fsid может использоваться в качестве второго аргумента системного
вызова sysfs(2).



ДЕФЕКТЫ


В Linux 2.6.38 и до Linux 3.1 включительно, вызов fstatfs() завершался с ошибкой
ENOSYS для файловых дескрипторов, созданных с помощью pipe(2).



СМОТРИТЕ ТАКЖЕ


Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 474 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar