Чтение онлайн

на главную - закладки

Жанры

Разработка ядра Linux
Шрифт:

• 

unsigned long get_unmapped_area(struct file*file,

unsigned long addr, unsigned long len, unsigned long offset,

unsigned long flags);

Эта функция получает неиспользуемое пространство адресов для отображения данного файла.

• 

int check_flags(int flags);

Эта функция используется для проверки корректности флагов, которые передаются в системный вызов

fcntl
, при использовании команды
SETFL
. Как и в случае многих операций подсистемы VFS, для файловой системы нет необходимости реализовать функцию
check_flags
. Сейчас это сделано только для файловой системы NFS. Эта функция позволяет файловой системе ограничить некорректные значения флагов команды
SETFL
в обобщенном системном вызове
fcntl
. Для файловой системы NFS не разрешается использовать комбинацию флагов
O_APPEND
и
O_DIRECT
.

• 

int flock(struct file *filp, int cmd, struct file_lock *fl);

Эта функция используется для реализации системного вызова

flock
, который служит для выполнения рекомендованных блокировок.

Структуры данных, связанные с файловыми системами

В дополнение к фундаментальным объектам подсистемы VFS, ядро использует и другие стандартные структуры данных для управления данными, связанными с файловыми системами. Первый объект используется для описания конкретного типа файловой системы, как, например, ext3 или XFS. Вторая структура данных используется для описания каждого экземпляра смонтированной файловой системы.

Поскольку операционная система Linux поддерживает множество файловых систем, то ядро должно иметь специальную структуру для описания возможностей и поведения каждой файловой системы.

struct file_system_type {

 const char *name; /* название файловой системы */

 struct subsystem subsys; /* объект подсистемы sysfs */

 int fs_flags; /* флаги типа файловой системы */

 /* следующая функция используется для считывания суперблока с диска */

 struct super_block*(*get_sb)(

struct file_system_type*, int, char*, void*);

 /* эта функция используется для прекращения доступа к суперблоку */

 void (*kill_sb)(struct super_block*);

 struct module *owner; /* соответствующий модуль (если есть) */

 struct file_system_type *next; /* следующая файловая система в списке */

 struct list_head fs_supers; /* список объектов типа суперблок */

};

Функция

get_sb
служит для считывания суперблока с диска и заполнения объекта суперблока соответствующими данными при монтировании файловой системы. Остальные параметры описывают свойства файловой системы.

Для каждого типа файловой системы существует только одна структура

file_system_type
, независимо от того, сколько таких файловых систем смонтировано и смонтирован ли хотя бы один экземпляр соответствующей файловой системы.

Значительно интереснее становится, когда файловая система монтируется, при этом создается структура

vfsmount
. Эта структура используется для представления конкретного экземпляра файловой системы, или, другими словами, точки монтирования.

Структура

vfsmount
определена в файле
<linux/mount.h>
следующим образом.

struct vfsmount {

 struct list_head mnt_hash; /* список хеш-таблицы */

 struct vfsmount *mnt_parent; /* родительская файловая система */

 struct dentry *mnt_mountpoint; /* объект элемента каталога

точки монтирования */

 struct dentry *mnt_root; /* объект элемента каталога корня

данной файловой системы */

 struct super_block *mnt_sb; /* суперблок данной файловой системы */

 struct list_head mnt_mounts; /* список файловых систем,

смонтированных к данной */

 struct list_head mnt_child; /* потомки, связанные с родителем */

 atomic_t mnt_count; /* счетчик использования */

 int mnt_flags; /* флаги монтирования */

 char *mnt_devname; /* имя смонтированного устройства */

 struct list_head mnt_list; /* список дескрипторов */

 struct list_head mnt_fslinkk; /* истекший список, специфичный

для файловой системы */

 struct namespace *mnt_namespace; /* связанное пространство имен */

};

Самая сложная задача — это поддержание списка всех точек монтирования и взаимоотношений между данной файловой системой и другими точками монтирования. Эта информация хранится в различных связанных списках структуры

vfsmount
.

Структура

vfsmount
также содержит поле
mnt_flags
. В табл. 12.1 приведен список стандартных флагов монтирования.

Таблица 12.1. Список стандартных флагов монтирования

Флаг Описание
MNT_NOSUID
Запрещает использование флагов setuid и setgid для бинарных файлов на файловой системе
MNT_NODEV
Запрещает доступ к файлам устройств на файловой системе
MNT_NOEXEC
Запрещает выполнение программ на файловой системе

Эти флаги полезны, в основном, для сменных носителей, которым администратор не доверяет.

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

Идеальный мир для Лекаря 2

Сапфир Олег
2. Лекарь
Фантастика:
юмористическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 2

Тринадцатый VIII

NikL
8. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый VIII

Хозяин Теней 5

Петров Максим Николаевич
5. Безбожник
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Хозяин Теней 5

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Телохранитель Генсека. Том 3

Алмазный Петр
3. Медведев
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Телохранитель Генсека. Том 3

Лекарь Империи 6

Карелин Сергей Витальевич
6. Лекарь Империи
Фантастика:
городское фэнтези
боевая фантастика
аниме
попаданцы
5.00
рейтинг книги
Лекарь Империи 6

Виктор Глухов агент Ада. Компиляция. Книги 1-15

Сухинин Владимир Александрович
Виктор Глухов агент Ада
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Виктор Глухов агент Ада. Компиляция. Книги 1-15

Кодекс Императора II

Сапфир Олег
2. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Императора II

Александр Агренев. Трилогия

Кулаков Алексей Иванович
Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Александр Агренев. Трилогия

Одержимый

Джеймс Питер
Top Thriller
Детективы:
триллеры
маньяки
8.67
рейтинг книги
Одержимый

По осколкам твоего сердца

Джейн Анна
2. Хулиган и новенькая
Любовные романы:
современные любовные романы
5.56
рейтинг книги
По осколкам твоего сердца

Я еще царь. Книга XXX

Дрейк Сириус
30. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я еще царь. Книга XXX

Черный Маг Императора 15

Герда Александр
15. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
фантастика: прочее
5.00
рейтинг книги
Черный Маг Императора 15