В. Костромин (kos at rus-linux dot net), "16.3. Индексные дескрипторы файлов" - 14/09/2004 || Библиотека ЛинуксЦентра

Глава 16. Обратная сторона файловой системы

Предыдущий раздел Оглавление Следующий раздел

16.3. Индексные дескрипторы файлов

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

Строение индексного дескриптора файла приведено в табл. 16.4.

Таблица 16.4. Структура индексного дескриптора

Название поля

Тип

Описание

i_mode

USHORT

Тип и права доступа к данному файлу

i_uid

USHORT

Идентификатор владельца файла (Owner Uid)

i_size

ULONG

Размер файла в байтах

i_atime

ULONG

Время последнего обращения к файлу (Access time)

i_ctime

ULONG

Время создания файла

i_mtime

ULONG

Время последней модификации файла

i_dtime

ULONG

Время удаления файла

i_gid

USHORT

Идентификатор группы (GID)

i_links_count

USHORT

Счетчик числа связей (Links count)

i_blocks

ULONG

Число блоков, занимаемых файлом

i_flags

ULONG

Флаги файла (File flags)

i_reserved1

ULONG

Зарезервировано для ОС

i_block

ULONG[15]

Указатели на блоки, в которых записаны данные файла (это поле подробно описано в разд. 16.4)

i_version

ULONG

Версия файла (для NFS)

i_file_acl

ULONG

ACL файла

i_dir_acl

ULONG

ACL каталога

i_faddr

ULONG

Адрес фрагмента (Fragment address)

i_frag

UCHAR

Номер фрагмента (Fragment number)

i_fsize

UCHAR

Размер фрагмента (Fragment size)

i_pad1

USHORT

Заполнение

i_reserved2

ULONG[2]

Зарезервировано

Поле типа и прав доступа к файлу представляет собой двухбайтовое слово, каждый бит которого служит флагом, индицирующим отношение файла к определенному типу или установку одного конкретного права на файл.

Таблица 16.5. Структура поля, задающего тип и права доступа

Идентификатор

Значение

Назначение флага (поля)

S_IFMT

F000

Маска для типа файла

S_IFSOCK

A000

Доменное гнездо (socket)

S_IFLNK

C000

Символическая ссылка

S_IFREG

8000

Обычный (regular) файл

S_IFBLK

6000

Блок-ориентированное устройство

S_IFDIR

4000

Каталог

S_IFCHR

2000

Байт-ориентированное (символьное) устройство

S_IFIFO

1000

Именованный канал (fifo)

S_ISUID

0800

SUID — бит смены владельца

S_ISGID

0400

SGID — бит смены группы

S_ISVTX

0200

Бит сохранения задачи (sticky bit)

S_IRWXU

01C0

Маска прав владельца файла

S_IRUSR

0100

Право на чтение

S_IWUSR

0080

Право на запись

S_IXUSR

0040

Право на выполнение

S_IRWXG

0038

Маска прав группы

S_IRGRP

0020

Право на чтение

S_IWGRP

0010

Право на запись

S_IXGRP

0008

Право на выполнение

S_IRWXO

0007

Маска прав остальных пользователей

S_IROTH

0004

Право на чтение

S_IWOTH

0002

Право на запись

S_IXOTH

0001

Право на выполнение

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

Таблица 16.6. Особые индексные дескрипторы

Идентификатор

Значение

Описание

EXT2_BAD_INO

1

Индексный дескриптор, в котором перечислены адреса дефектных блоков на диске (Bad blocks inode)

EXT2_ROOT_INO

2

Индексный дескриптор корневого каталога файловой системы (Root inode)

EXT2_ACL_IDX_INO

3

ACL inode

EXT2_ACL_DATA_INO

4

ACL inode

EXT2_BOOT_LOADER_INO

5

Индексный дескриптор загрузчика (Boot loader inode)

EXT2_UNDEL_DIR_INO

6

Инлексный дескриптор каталога для удаленных файлов (Undelete directory inode)

EXT2_FIRST_INO

11

Первый незарезервированный индексный дескриптор

Самый важный дескриптор в этом списке — дескриптор корневого каталога. Этот дескриптор указывает на корневой каталог, который, подобно всем каталогам, представляет собой связанный список, состоящий из записей переменной длины. Каждая запись имеет следующую структуру (табл. 16.7):

Таблица 16.7. Структура дескриптора, описывающего корневой каталог

Название поля

Тип

Описание

Inode

ULONG

Номер индексного дескриптора (индекс) файла

Rec_len

USHORT

Длина этой записи

Name_len

USHORT

Длина имени файла

Name

CHAR[0]

Имя файла

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


Предыдущий раздел Оглавление Следующий раздел


В. Костромин (kos at rus-linux dot net), "16.3. Индексные дескрипторы файлов" - 14/09/2004 || Библиотека ЛинуксЦентра