LINUX.ORG.RU

История изменений

Исправление SZT, (текущая версия) :

Прямо на диске хэш-таблица? Таблица будет скорее всего иметь какие-то показатели количества и какой-то способ определить размер элемента.

Да, на диске в сериализованном виде хранится хеш-таблица. Записи в хеш-таблице будут иметь допустим такой вид:

used bytes | text description          | d
-----------+---------------------------+---------------
somewhere  | ptr_to_first_file_ds = 8  | указатель на первый файл в связном списке
...
8..11      | ASCIIZ file_1 name "aaa"  |\
12..15     | uint32_t file_1_start = 0 | > struct file 
16..19     | uint32_t file_1_len   = 10|/
20..23     | uint32_t ptr_to_next  = 40|
...
40..43     | ASCIIZ file_2 name "bbb"  |\
44..47     | uint32_t file_2_start = 11| > struct file
48..51     | uint32_t file_2_len   = 7 |/
20..23     | uint32_t ptr_to_next = 0xffffffff // конец
Хотим найти файл с именем «bbb» - пропускаем это имя через хеш-функцию - хеш это индекс массива somewhere, получаем получаем указатель на первый элемент связного списка, там файл aaa. И надо пройтись по всему этому связному списку, и остановиться, когда найдем файл bbb или когда дойдем до конца связного списка, а конец связного списка когда ptr_to_next = 0xffffffff - значит файл не найден

Исходная версия SZT, :

Прямо на диске хэш-таблица? Таблица будет скорее всего иметь какие-то показатели количества и какой-то способ определить размер элемента.

Записи в хеш-таблице будут иметь допустим такой вид:

used bytes | text description          | d
-----------+---------------------------+---------------
somewhere  | ptr_to_first_file_ds = 8  | указатель на первый файл в связном списке
...
8..11      | ASCIIZ file_1 name "aaa"  |\
12..15     | uint32_t file_1_start = 0 | > struct file 
16..19     | uint32_t file_1_len   = 10|/
20..23     | uint32_t ptr_to_next  = 40|
...
40..43     | ASCIIZ file_2 name "bbb"  |\
44..47     | uint32_t file_2_start = 11| > struct file
48..51     | uint32_t file_2_len   = 7 |/
20..23     | uint32_t ptr_to_next = 0xffffffff // конец
Хотим найти файл с именем «bbb» - пропускаем это имя через хеш-функцию - хеш это индекс массива somewhere, получаем получаем указатель на первый элемент связного списка, там файл aaa. И надо пройтись по всему этому связному списку, и остановиться, когда найдем файл bbb или когда дойдем до конца связного списка, а конец связного списка когда ptr_to_next = 0xffffffff - значит файл не найден