Все файловые системы, рассмотренные ранее в этой главе, размещаются на дисках. Однако Linux поддерживает также
Для Linux созданы различные файловые системы, основанные на использовании памяти. Самой разработанной из них к настоящему моменту является файловая система tmpfs, которая впервые появилась в версии Linux 2.4. Файловая система tmpfs отличается от других файловых систем, использующих память, тем, что она является файловой системой
Файловая система tmpfs является необязательным компонентом ядра Linux, который конфигурируется с помощью параметра CONFIG_TMPFS.
Для создания файловой системы tmpfs используется команда такого типа:
# mount — t tmpfs source target
Имя аргумента source может быть любым, важно лишь, чтобы оно присутствовало в файле /proc/mounts и отображалось с помощью команд mount и df. Аргумент target — это, как обычно, точка монтирования файловой системы. Следует отметить, что не обязательно использовать сначала команду mkfs для создания файловой системы, поскольку ядро автоматически создает ее во время системного вызова mount().
В качестве примера использования файловой системы tmpfs можно привести применение стека монтирования (чтобы нам не пришлось беспокоиться о том, что точка монтирования /tmp уже используется) и создание файловой системы tmpfs в точке монтирования /tmp следующим образом:
# mount — t tmpfs newtmp /tmp
# cat /proc/mounts | grep tmp
newtmp /tmp tmpfs rw 0 0
Команда, подобная приведенной выше (или эквивалентная запись в файле /etc/fstab), иногда применяется для улучшения производительности приложений (например, компиляторов), которые активно используют каталог /tmp для создания временных файлов.
По умолчанию файловой системе tmpfs разрешено занимать не более половины размера оперативной памяти, однако можно использовать параметр size=nbytes mount, чтобы задать другую верхнюю границу для размера этой файловой системы, либо при создании системы, либо во время ее последующего повторного монтирования. (Файловая система tmpfs потребляет лишь столько памяти и пространства подкачки, сколько необходимо в данный момент для содержащихся в ней файлов.)
Если мы размонтируем файловую систему tmpfs или если происходит системный сбой, то все данные в этой файловой системе утрачиваются; отсюда и ее название — tmpfs.
Помимо применения для пользовательских приложений, файловая система tmpfs служит также двум специальным целям.
• Невидимая файловая система tmpfs, смонтированная внутренним образом с помощью ядра, использовалась для реализации совместно используемой памяти System V, а также для совместно используемого анонимного распределения памяти.
• Файловая система tmpfs, смонтированная в точке /dev/shm, используется для реализации совместно используемой памяти и семафоров POSIX с помощью библиотеки glibc.
Библиотечные функции statvfs() и fstatvfs() получают информацию о смонтированной файловой системе.
#include
int statvfs(const char *
int fstatvfs(int
Обе функции возвращают 0 при успешном завершении и –1 при ошибке
Единственное различие между этими двумя функциями состоит в том, каким образом идентифицируется файловая система. Для функции statvfs() используется аргумент pathname, чтобы указать имя любого файла в файловой системе. Для функции fstatvfs() указывается открытый дескриптор файла, fd, ссылающийся на какой-либо файл в файловой системе. Обе функции возвращают структуру statvfs, содержащую информацию о файловой системе в буфере, на который указывает аргумент statvfsbuf. Эта структура составлена следующим образом:
struct statvfs {
unsigned long f_bsize; /* Размер блока файловой системы (в байтах) */
unsigned long f_frsize; /* Фундаментальный размер блока
файловой системы (в байтах) */
fsblkcnt_t f_blocks; /* Общее количество блоков в файловой
системе (в единицах 'f_frsize') */
fsblkcnt_t f_bfree; /* Общее количество свободных блоков */
fsblkcnt_t f_bavail; /* Количество свободных блоков, доступных
для непривилегированного процесса */