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

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_link_scount 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] Имя файла

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг:

4.4.2.1. Отображение переменных FILE* на дескрипторы файлов

Из книги автора

4.4.2.1. Отображение переменных FILE* на дескрипторы файлов Стандартные библиотечные функции ввода/вывода и переменные FILE* из <stdio.h>, такие, как stdin, stdout и stderr, построены поверх основанных на дескрипторах файлов системных вызовах.Иногда полезно получить непосредственный


Наследуемые дескрипторы

Из книги автора

Наследуемые дескрипторы Часто бывает так, что дочернему процессу требуется доступ к объекту, к которому можно обратиться через дескриптор, определенный в родительском процессе, и если этот дескриптор — наследуемый, то дочерний процесс может получить копию открытого


Абсолютные и самоопределяющиеся относительные дескрипторы безопасности

Из книги автора

Абсолютные и самоопределяющиеся относительные дескрипторы безопасности Программа 15.5, позволяющая изменять ACL, удобна тем, что просто заменяет один дескриптор безопасности (SD) другим. В то же время, при замене существующих SD следует проявлять осторожность, поскольку они


11.2.1. Файловые дескрипторы

Из книги автора

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


Индексные дескрипторы

Из книги автора

Индексные дескрипторы Индексный дескриптор, или inode, содержит информацию о файле, необходимую для обработки данных, т.е. метаданные файла. Каждый файл ассоциирован с одним inode, хотя может иметь несколько имен в файловой системе, каждое из которых указывает на один и тот же


Виртуальные индексные дескрипторы

Из книги автора

Виртуальные индексные дескрипторы Дисковый файл обычно имеет связанную с структуру данных, называемую метаданными или inode, где хранятся основные характеристики данного файла и с помощью которой обеспечивается доступ к его данным. Одним из исключений из этого правила


Файловые дескрипторы

Из книги автора

Файловые дескрипторы Файловый дескриптор представляет собой неотрицательное целое число, возвращаемое системными вызовами, такими как creat(2), open(2) или pipe(2). После получения файлового дескриптора процесс может использовать его для дальнейшей работы с файлом, например с


2.5 Индексные дескрипторы

Из книги автора

2.5 Индексные дескрипторы Файл имеет несколько атрибутов: имя, содержимое и служебную информацию (права доступа и даты модификации). Служебная информация размещается в индексном дескрипторе вместе с важной системной информацией, такой, как размер файла, место хранения


1.1.3. Дескрипторы вместо классов

Из книги автора

1.1.3. Дескрипторы вместо классов Программируя в Delphi, мы быстро привыкаем к тому, что каждый объект реализуется экземпляром соответствующего класса. Например, кнопка реализуется экземпляром класса TButton, контекст устройства — классом TCanvas. Но когда создавались первые


7.2.5. Дескрипторы файлов процесса

Из книги автора

7.2.5. Дескрипторы файлов процесса Элемент fd файловой системы /proc — это подкаталог, в котором содержатся записи обо всех файлах, открытых процессом. Каждая запись представляет собой символическую ссылку на файл или устройство. Через эти ссылки можно осуществлять чтение и


Индексные выражения

Из книги автора

Индексные выражения Синтаксис:<выражение1>[<выражение2>]Здесь квадратные скобки являются символами языка Си, а не элементами описания.Значение индексного выражения находится по адресу, который вычисляется как сумма значений <выражения1> и <выражения2>.


8.3.3 Открытие Файлов

Из книги автора

8.3.3 Открытие Файлов Точные детали того, как открываются и закрываются файлы, различаются в разных операционных системах и здесь подробно не описываются. Поскольку после включения «stream.h» станвятся доступны cin, cout и cerr, во многих (если не во всех) программах не нужно держать


Индексные свойства

Из книги автора

Индексные свойства Индексные свойства ведут себя аналогично полям-массивам и используются, как правило, для доступа к элементам контейнеров. Как и при использовании обычных свойств, при использовании индексных свойств могут попутно выполняться некоторые