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

Лав Роберт

Шрифт:

Объект

inode
содержит всю информацию, которая необходима ядру для манипуляций с файлами и каталогами. В файловых системах в стиле Unix вся информация просто считывается из дисковых индексов и помещается в объект
inode
подсистемы VFS. Если файловые системы не имеют индексов, то эту информацию необходимо получить из других дисковых структур [70] .

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

struct inode
, которая определена в файле
<linux/fs.h>
. Эта структура с комментариями, описывающими назначение каждого поля, имеет следующий вид.

70

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

struct inode {

 struct hlist_node i_hash; /* хешированный список */

 struct list_head i_list; /* связанный список индексов */

 struct list_head i_dentry; /* связанный список объектов dentry */

 unsigned long i_ino; /* номер индекса */

 atomic_t i_count; /* счетчик ссылок */

 umode_t i_mode; /* права доступа */

 unsigned int i_nlink; /* количество жестких ссылок */

 uid_t i_uid; /* идентификатор пользователя-владельца */

 gid_t i_gid; /* идентификатор группы-владельца */

 kdev_t i_rdev; /* связанное устройство */

 loff_t i_size; /* размер файла в байтах */

 struct timespec i_atime; /* время последнего доступа к файлу */

 struct timespec i_mtime; /* время последнего изменения файла */

 struct timespec i_ctime; /* время изменения индекса */

 unsigned int i_blkbits; /* размер блока в битах */

 unsigned long i_blksize; /* размер блока в байтах */

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

 unsigned long i_blocks; /* размер файла в блоках */

 unsigned short i_bytes; /* количество использованных байтов */

 spinlock_t i_lock; /* блокировка для защиты полей */

 struct rw_semaphore i_alloc_sem /* вложенные блокировки при

захваченной i_sem */

 struct semaphore i_sem; /* семафор индекса */

 struct inode_operations *i_op; /* таблица операций с индексом */

 struct file_operations *i_fop; /* файловые операции */

 struct super_block *i_sb; /* связанный суперблок */

 struct file_lock *i_flock; /* список блокировок файлов */

 struct address_space *i_mapping; /* соответствующее адресное

пространство */

 struct address_space i_data; /* адресное пространство устройства */

 struct dquot *i_dquot[MAXQUOTAS]; /* дисковые квоты

для индекса */

 struct list_head i_devices; /* список блочных устройств */

 struct pipe_inode_info *i_pipe; /* информация конвейера */

 struct block_device *i_bdev; /* драйвер блочного устройства */

 unsigned long i_dnotify_mask; /* события каталога */

 struct dnotify_struct *i_dnotify; /* информация о событиях каталога */

 unsigned long i_state; /* флаги состояния */

 unsigned long dirtied_when /* время первого изменения */

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

 unsigned char i_sock; /* сокет или нет? */

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

  • Читать дальше
  • 1
  • ...
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • ...

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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