Почему inode числа запускаются от 1 а не 0?

Конвенция языка C считает индексы массива от 0. Почему inode числа запускаются от 1 а не 0?

Если inode 0 резервируется, для некоторого специального использования, то, каково значение inode 0?

21
задан manav m-n 20 January 2010 в 04:53
поделиться

3 ответа

Обычно inode 0 зарезервирован, потому что возвращаемое значение 0 обычно сигнализирует об ошибке. Многократный метод в ядре Linux - особенно в слое VFS, совместно используемый всеми файловыми системами - вернуть ino_t, e.g. Find_inode_Number .

Здесь более зарезервированные номера инодовых номеров. Например, в Ext2 :

#define EXT2_BAD_INO             1      /* Bad blocks inode */
#define EXT2_ROOT_INO            2      /* Root inode */
#define EXT2_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT2_UNDEL_DIR_INO       6      /* Undelete directory inode */

и EXT3 имеет:

#define EXT3_BAD_INO             1      /* Bad blocks inode */
#define EXT3_ROOT_INO            2      /* Root inode */
#define EXT3_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT3_UNDEL_DIR_INO       6      /* Undelete directory inode */
#define EXT3_RESIZE_INO          7      /* Reserved group descriptors inode */
#define EXT3_JOURNAL_INO         8      /* Journal inode */

и Ext4 имеет:

#define EXT4_BAD_INO             1      /* Bad blocks inode */
#define EXT4_ROOT_INO            2      /* Root inode */
#define EXT4_USR_QUOTA_INO       3      /* User quota inode */
#define EXT4_GRP_QUOTA_INO       4      /* Group quota inode */
#define EXT4_BOOT_LOADER_INO     5      /* Boot loader inode */
#define EXT4_UNDEL_DIR_INO       6      /* Undelete directory inode */
#define EXT4_RESIZE_INO          7      /* Reserved group descriptors inode */
#define EXT4_JOURNAL_INO         8      /* Journal inode */

Другие файлы используют INO 1 в качестве номинальной ночи inode Отказ В целом, файловая система бесплатна для выбора своих номеров INODE и его зарезервированные значения INO (за исключением 0).

25
ответ дан 29 November 2019 в 06:49
поделиться

0 используется в качестве значения Sentinel , чтобы указать NULL или NOODE. Подобно тому, как указатели могут быть нулевым в C. Без Sentinel, вам понадобится дополнительный бит для проверки, если настроен INODE в структуре или нет.

Здесь подробнее:

Все адреса блока и inode начинаются с 1. Первый блок на диске является блок 1. 0 используется для обозначения нет блокировать. (Редкие файлы могут иметь эти внутри них)

http://uranus.chrysocome.net/explore2fs/es2fs.htm

, например, в старых файловых системах, где каталоги были представлены в виде фиксированного массива записей файлов, удаление файла приведет к настройке inode inode val до 0. При пересечении каталога любой вход с помощью inode of 0 будет игнорироваться.

27
ответ дан 29 November 2019 в 06:49
поделиться

Когда я писал файловую систему давным-давно, я использовал индекс 0 для псевдо-файла .badblocks .

В некоторых файловых системах .badblocks фактически присутствует в корневом каталоге как обычный файл, принадлежащий пользователю root и в режиме 0. root может его открыть, но чтение или запись не определено.

Существует древняя традиция, что индексные дескрипторы начинаются с 1, # 1 - это .badblocks , а # 2 - корневой каталог. Несмотря на то, что .badblocks не особенно хорошо гарантирован, многие файловые системы делают все возможное, чтобы сделать root # 2.

0
ответ дан 29 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: