Индексные дескрипторы файлов
Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером — индексом файла. Это означает, что число файлов, которые могут быть созданы в файловой системе, ограничено числом индексных дескрипторов, которое либо явно задается при создании файловой системы, либо вычисляется исходя из физического объема дискового раздела.
Строение индексного дескриптора файла приведено в табл. 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]
| Имя файла
Использование записей переменной длины позволяет использовать длинные имена файлов без пустой траты дискового пространства. Отдельная запись в каталоге не может пересекать границу блока (т. е. должна быть расположена целиком внутри одного блока). Поэтому, если очередная запись не помещается целиком в данном блоке, она переносится в следующий блок, а предыдущая запись продолжается таким образом, чтобы она заполнила блок до конца.
Содержание раздела