Индексные дескрипторы файлов
Каждому файлу на диске соответствует один и только один индексный дескриптор файла, который идентифицируется своим порядковым номером - индексом файла. Это означает, что число файлов, которые могут быть созданы в файловой системе, ограничено числом индексных дескрипторов, которое либо явно задается при создании файловой системы, либо вычисляется исходя из физического объема дискового раздела.
Строение индексного дескриптора файла приведено в табл. 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] | Указатели на блоки, в которых записаны данные файла (это поле подробно описано следующем разделе) |
| 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] | Зарезервировано |
Поле типа и прав доступа к файлу представляет собой двухбайтовое слово, каждый бит которого служит флагом, индицирующим отношение файла к определенному типу или установку одного конкретного права на файл.
| 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).
| 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 | Первый незарезервированный индексный дескриптор |
| Inode | ULONG | Номер индексного дескриптора (индекс) файла |
| Rec_len | USHORT | Длина этой записи |
| Name_len | USHORT | Длина имени файла |
| Name | CHAR[0] | Имя файла |