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

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

Жанры

Разработка ядра Linux (Второе издание)
Шрифт:

для записи */

 void *i_security; /* модуль безопасности */

 __u32 i_generation; /* номер версии индекса */

 union {

void *generic_ip; /* специфическая информация

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

 } u;

};

Для каждого файла в системе существует представляющий его индекс (хотя объект файлового индекса создается в памяти только тогда, когда к файлу осуществляется доступ). Это справедливо и для специальных

файлов, таких как файлы устройств или конвейеры. Следовательно, некоторые из полей структуры
struct inode
относятся к этим специальным файлам. Например, поле
i_pipe
указывает на структуру данных именованного конвейера. Если индекс не относится к именованному конвейеру, то это поле просто содержит значение
NULL
Другие поля, связанные со специальными файлами, — это
i_devices
,
i_bdev
,
i_cdev
.

Может оказаться, что та или иная файловая система не поддерживает тех свойств, которые присутствуют в объекте

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

Операции с файловыми индексами

Так же как и в случае операций суперблока, важным является поле

inode_operations
, в котором описаны функции файловой системы, которые могут быть вызваны подсистемой VFS для объекта файлового индекса. Как и для суперблока, операции с файловыми индексами могут быть вызваны следующим образом.

i->i_op->truncate(i);

где переменная

i
содержит указатель на определенный объект файлового индекса. В данном случае для индекса
i
выполняется операция
truncate
, которая определена для файловой системы, в которой находится указанный файловый индекс
i
. Структура
inode_operations
определена в файле
<linux/fs.h>
, как показано ниже.

struct inode_operations {

 int (*create)(struct inode*, struct dentry*, int);

 struct dentry* (*lookup)(struct inode*, struct dentry*);

 int (*link)(struct dentry*, struct inode*, struct dentry*);

 int (*unlink)(struct inode*, struct dentry*);

 int (*symlink)(struct inode*, struct dentry*, const char*);

 int (*mkdir)(struct inode*, struct dentry*, int);

 int (*rmdir)(struct inode*, struct dentry*);

 int (*mknod)(struct inode*, struct dentry*, int, dev_t);

 int (*rename)(struct inode*, struct dentry*,

struct inode*, struct dentry*);

 int (*readlink)(struct dentry*, char*, int);

 int (*follow_link)(struct dentry*, struct nameidata*);

 int (*put_link)(struct dentry*, struct nameidata*);

 void (*truncate)(struct inode*);

 int (*permission)(struct inode*, int);

 int (*setattr)(struct dentry*, struct iattr*);

 int (*getattr)(struct vfsmount*, struct dentry*, struct kstat*);

 int (*setxattr)(struct dentry*, const char*,

 const void*, size_t, int);

 ssize_t (*getxattr)(struct dentry*, const char*, void*, size_t);

 ssize_t (*listxattr)(struct dentry*, char*, size_t);

 int (*removexattr)(struct dentry*, const char*);

};

Рассмотрим

указанные операции более подробно.

• 

int create(struct inode *dir, struct dentry *dentry, int mode);

Эта функция вызывается подсистемой VFS из системных вызовов

creat
и
open
для создания нового файлового индекса, который имеет указанный режим доступа (
mode
) и связан с указанным элементом каталога (
dentry
).

• 

struct dentry* lookup(struct inode *dir, struct dentry *dentry);

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

• 

int link(struct dentry *old_dentry, struct inode *dir,

struct dentry *dentry);

Эта функция вызывается из системного вызова

link
для создания жесткой ссылки (hard link) на файл, соответствующий элементу каталога
old_dentry
в каталоге
dir
. Новая ссылка должна иметь имя, которое хранится в указанном элементе каталога
dentry
.

• 

int unlink(struct inode *dir, struct dentry *dentry);

Эта функция вызывается из системного вызова

unlink
для удаления файлового индекса, соответствующего элементу каталога
dentry
в каталоге
dir
.

• 

int symlink(struct inode *dir, struct dentry *dentry,

const char *symname);

Эта функция вызывается из системного вызова

symlink
для создания символьной ссылки с именем
symname
на файл, которому соответствует элемент каталога
dentry
в каталоге
dir
.

• 

int mkdir(struct inode *dir, struct dentry *dentry, int mode);

Эта функция вызывается из системного вызова

mkdir
для создания нового каталога с указанным режимом доступа (
mode
).

• 

int rmdir(struct inode *dir, struct dentry *dentry);

Эта функция вызывается из системного вызова

rmdir
для удаления каталога на который указывает элемент каталога
dentry
из каталога
dir
.

• 

int mknod(struct inode *dir, struct dentry *dentry,

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

Курсант: назад в СССР

Дамиров Рафаэль
1. Курсант
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Курсант: назад в СССР

Чужая семья генерала драконов

Лунёва Мария
6. Генералы драконов
Фантастика:
фэнтези
5.00
рейтинг книги
Чужая семья генерала драконов

Пышка и Герцог

Ордина Ирина
Фантастика:
юмористическое фэнтези
историческое фэнтези
фэнтези
5.00
рейтинг книги
Пышка и Герцог

Имперский Курьер. Том 5

Бо Вова
5. Запечатанный мир
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Имперский Курьер. Том 5

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Возвышение Меркурия

Кронос Александр
1. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия

Законы Рода. Том 11

Андрей Мельник
11. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 11

Измена. (Не)любимая жена олигарха

Лаванда Марго
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. (Не)любимая жена олигарха

Вираж бытия

Ланцов Михаил Алексеевич
1. Фрунзе
Фантастика:
героическая фантастика
попаданцы
альтернативная история
6.86
рейтинг книги
Вираж бытия

Отмороженный 11.0

Гарцевич Евгений Александрович
11. Отмороженный
Фантастика:
боевая фантастика
рпг
попаданцы
фантастика: прочее
фэнтези
5.00
рейтинг книги
Отмороженный 11.0

История "не"мощной графини

Зимина Юлия
1. Истории неунывающих попаданок
Фантастика:
попаданцы
фэнтези
5.00
рейтинг книги
История немощной графини

Крестоносец

Ланцов Михаил Алексеевич
7. Помещик
Фантастика:
героическая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Крестоносец

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Газлайтер. Том 15

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга