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

Лав Роберт

Шрифт:

• 

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

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

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

• 

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

Эта функция разрешает или запрещает отправку сигнала для уведомлении о событиях при асинхронном вводе-выводе.

• 

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

Эта функция управляет файловыми блокировками для данного файла.

• 

ssize_t readv(struct file *file,

const struct iovec *vector, unsigned long count, loff_t* offset);

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

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

•

ssize_t writev(struct file *file,

const struct iovec *vector, unsigned long count, loff_t *offset);

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

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

•

ssize_t sendfile(struct file *file,

loff_t *of fset, size_t size, read_actor_t actor, void *target);

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

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

• 

ssize_t sendpage(struct file *file,

struct page *page, int offset, size_t size,

loff_t *pos, int more);

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

• 

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; /* список объектов типа суперблок */

  • Читать дальше
  • 1
  • ...
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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