Вход/Регистрация
Linux программирование в примерах
вернуться

Роббинс Арнольд

Шрифт:

/dev/hda5 7815168 503243 7311925 7% /d

none 64154 1 64153 1% /dev/shm

/dev/hda1 0 0 0 - /win

8.3.1. Стиль POSIX:

statvfs
и
fstatvfs

На ранних системах Unix была только одна разновидность файловой системы. Для них было достаточно, если

df
считывала суперблок каждой смонтированной файловой системы, извлекала значимые сведения и красиво форматировала их для отображения. (Суперблок обычно был вторым блоком в файловой системе; первым был загрузочный блок, содержащий загрузочный код).

Однако в современном мире такой подход был бы непригодным. POSIX предоставляет расширение XSI для получения доступа к этой информации. Главная функция называется

statvfs
(«vfs» часть происходит от лежащей в основе технологии SunOS, использованной позже в System V Release 4, которая называется виртуальной файловой системой.) Имеется две функции:

#include <sys/types.h> /* XSI */

#include <sys/statvfs.h>

int statvfs(const char *path, struct statvfs *buf);

int fstatvfs(int fd, struct statvfs *buf);

statvfs
использует для любого файла имя пути; она возвращает сведения о файловой системе, содержащей файл.
fstatvfs
принимает в качестве первою аргумента дескриптор открытого файла, здесь также возвращается информация о файловой системе, содержащей открытый файл,
struct statvfs
содержит следующие члены:

struct statvfs {

 unsigned long int f_bsize; /* Размер блока */

 unsigned long int f_frsize;

/* Размер фрагмента («основной размер блока») */

 fsblkcnt_t f_blocks; /* Общее число блоков */

 fsblkcnt_t f_bfree; /* Общее число свободных блоков */

 fsblkcnt_t f_bavail; /* Число доступных блоков (≤f_bfree) */

 fsfilcnt_t f_files; /* Общее число индексов */

 fsfilcnt_t f_ffree; /* Общее число свободных индексов */

 fsfilcnt_t f_favail; /* Число доступных индексов (≤f_files) */

 unsigned long int f_fsid; /* ID файловой системы */

 unsigned long int f_flag; /* Флаги: ST_RDONLY и/или ST_NOSUID */

 unsigned long int f_namemax; /* Максимальная длина имени файла */

};

Сведений, которые в ней содержатся, достаточно для написания

df
:

unsigned long int f_bsize

Размер блока является предпочтительным размером для осуществления ввода/вывода. Файловая система пытается хранить по крайней мере

f_bsize
байтов стоящих данных в смежных секторах на диске. (Сектор является наименьшим количеством адресуемых данных на диске. Обычно дисковый сектор равен 512 байтам.)

unsigned long int f_frsize

Некоторые файловые системы (такие, как BSD Fast Filesystem) проводят различие между блоками и фрагментами блоков. Небольшие файлы, общий размер которых меньше размера блока, находятся в некотором числе фрагментов. Это позволяет избежать пустой потери дискового пространства (за счет допустимой цепы большей сложности кода ядра). Размер фрагмента выбирается во время создания файловой системы.

fsblkcnt_t f_blocks

Общее число блоков (в единицах

f_bsize
) в файловой системе.

fsblkcnt_t f_bfree

Общее число свободных блоков в файловой системе.

fsblkcnt_t f_bavail

Число блоков, которые действительно могут использоваться. Некоторые файловые системы резервируют часть блоков файловой системы для использования суперпользователем при заполнении файловой системы. Современные системы резервируют около 5 процентов, хотя это число может быть изменено администратором. (См. tune2fs(8) на системе GNU/Linux и tunefs(8) на системах Unix.)

fsfilcnt_t f_files

Общее число индексов («порядковых номеров файлов» на языке POSIX) в файловой системе. Это число обычно инициализируется и делается постоянным при создании файловой системы.

fsfilcnt_t f_ffree

Общее число свободных узлов.

fsfilcnt_t f_favail

Число индексов, которые действительно могут быть использованы. Некоторая часть индексов резервируются для суперпользователя, точно так же, как для блоков.

unsigned long int f_fsid

  • Читать дальше
  • 1
  • ...
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: