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

на главную

Жанры

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

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

 struct file_operations *f_op; /* таблица файловых операций */

 atomic_t f_count; /* счетчик ссылок на этот объект */

 unsigned int f_flags; /* флаги, указанные

при вызове функции open */

 mode_t f_mode; /* режим доступа к файлу */

 loff_t f_pos; /* смещение в файле

(file pointer, offset) */

 struct fown_struct f_owner; /*
информация о владельце для обработки

сигналов */

 unsigned int f_uid; /* идентификатор пользователя владельца, UID */

 unsigned int f_gid; /* идентификатор группы владельца, GID */

 int f_error; /* код ошибки */

 struct file_ra_state f_ra; /* состояние предварительного считывания */

 unsigned long f_version; /* номер версии */

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

 void *private_data; /* привязка для

драйвера терминала */

 struct list_head f_ep_links; /* список ссылок eventpoll

(опрос событий) */

 spinlock_t f_ep_lock; /* блокировка eventpoll */

 struct address_space *f_mapping; /* отображение в страничном кэше */

};

По аналогии с объектом элемента каталога объект файла на самом деле не соответствует никакой структуре, которая хранится на жестком диске. Поэтому в этой структуре нет никакого флага, который бы указывал, что объект изменен (dirty) и требует обратной записи на диск. Объект file указывает на связанный с ним объект dentry с помощью указателя

f_dentry
. Объект dentry в свою очередь содержит указатель на связанный с ним индекс файла, который содержит информацию о том, изменен ли файл.

Файловые операции

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

struct file
, — это знакомые системные вызовы, составляющие основу системных вызовов ОС Unix.

Методы работы с файловым объектом хранятся в структуре

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

struct file_operations {

 struct module *owner;

 loff_t (*llseek)(struct file*, loff_t, int);

 ssize_t (*read)(struct file*, char*, size_t, loff_t*);

 ssize_t (*aio_read)(struct kiocb*, char*, size_t, loff_t);

 ssize_t (*write)(struct file*, const char*, size_t, loff_t*);

 ssize_t (*aio_write)(struct kiocb*, const char*, size_t, loff_t);

 int (*readdir)(struct file*, void*, filldir_t);

 unsigned int (*poll)(struct file*, struct poll_table_struct*);

 int (*ioctl)(struct inode*, struct file*, unsigned int, unsigned long);

 int (*mmap)(struct file*, struct vm_area_struct*);

 int (*open)(struct inode*, struct file*);

 int (*flush)(struct file*);

 int (*release)(struct inode*, struct file*);

 int (*fsync)(struct file*, struct dentry*, int);

 int (*aio_fsync)(struct kiocb*, int);

 int (*fasync)(int, struct file*, int);

 int (*lock)(struct file*, int, struct file_lock*);

 ssize_t (*readv)(struct file*, const struct iovec*,

unsigned long, loff_t*);

 ssize_t (*writev)(struct file*, const struct iovec*,

unsigned long, loff_t*);

 ssize_t (*sendfile)(struct file*, loff_t*, size_t,

read_actor_t, void*);

 ssize_t (*sendpage)(struct file*, struct page*, int,

size_t, loff_t*, int);

 unsigned long (*get_unmapped_area)(struct file*, unsigned long,

unsigned long, unsigned long, unsigned long);

 int (*check_flags)(int flags);

 int (*dir_notify)(struct file *filp, unsigned long arg);

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

};

Файловые

системы могут реализовать уникальную функцию для каждой из этих операций или использовать общий существующий метод. Общие методы нормально работают для обычных Unix-подобных файловых систем. Разработчики файловых систем не обязаны реализовать все эти функции, хотя основные методы должны быть реализованы. Если какой-либо метод не представляет интереса, то его можно установить в значение
NULL
.

Рассмотрим каждую операцию подробнее.

• 

loff_t llseek(struct file *file, loff_t offset, int origin);

Эта функция устанавливает значения указателя текущей позиции в файле (file pointer) в заданное значение параметра

offset
. Функция вызывается из системного вызова
lseek
.

• 

ssize_t read(struct file *file,

char *buf, size_t count, loff_t* offset);

Эта функция считывает

count
байт данных из указанного файла, начиная с позиции, заданной параметром
offset
, в буфер памяти, на который указывает параметр
buf
. После этого значение указателя текущей позиции в файле должно быть обновлено. Данная функция вызывается из системного вызова
read
.

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

Проклятый Лекарь. Род III

Скабер Артемий
3. Каратель
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проклятый Лекарь. Род III

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Измена. Возвращение любви!

Леманн Анастасия
3. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Возвращение любви!

Неудержимый. Книга XI

Боярский Андрей
11. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XI

Сердце Дракона. Том 9

Клеванский Кирилл Сергеевич
9. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.69
рейтинг книги
Сердце Дракона. Том 9

Война

Валериев Игорь
7. Ермак
Фантастика:
боевая фантастика
альтернативная история
5.25
рейтинг книги
Война

Под маской моего мужа

Рам Янка
Любовные романы:
современные любовные романы
5.67
рейтинг книги
Под маской моего мужа

Камень. Книга 3

Минин Станислав
3. Камень
Фантастика:
фэнтези
боевая фантастика
8.58
рейтинг книги
Камень. Книга 3

Измена. Право на счастье

Вирго Софи
1. Чем закончится измена
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на счастье

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

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

Сиротка

Первухин Андрей Евгеньевич
1. Сиротка
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Сиротка

Охота на эмиссара

Катрин Селина
1. Федерация Объединённых Миров
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Охота на эмиссара

Кодекс Охотника. Книга XV

Винокуров Юрий
15. Кодекс Охотника
Фантастика:
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XV

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12