Функция
dbopen
является стандартным методом для работы с базами данных. Одним из
поддерживаемых ей форматов являются ассоциативные массивы (hash files).
Описания основных методов доступа к базам данных находятся в
dbopen(3),
а данная страница руководства описывает только особенности
ассоциативных массивов.
Структура данных массивов гибка и динамична.
Особая структура данных, методы доступа к которой обеспечивает
dbopen,
определена в файле <db.h>:
Bsize
определяет размер заголовка блока массива, по умолчанию равный 256 байтам.
Этот параметр может быть изменен, чтобы увеличить размер для таблиц,
расположеных на диске, или таблиц с элементами большого размера.
ffactor
Ffactor
указывает на желаемую плотность таблицы ассоциативного массива.
Плотность - это максимальное количество ключей, которые могут находится в одной
связке, определяющей, на какую величину увеличивается или уменьшается
таблица. Значение по умолчанию - 8.
nelem
Nelem
- это предполагаемый окончательный размер таблицы массива.
Если величина не установлена, или установлена слишком маленькой,
размер таблицы увеличивается каждый раз, когда добавляется новый ключ.
Это может привести к понижению производительности и скорости работы.
Значение по умолчанию - 1.
cachesize
Максимальный размер внутреннего кэша таблицы, в байтах.
Эта величина
только
рекомендация, метод доступа скорее выделит память, чем завершится с ошибкой.
hash
Hash
- это пользовательская функция для ассоциативного массива.
Не существует функции, которая подойдет для любых данных, пользователю
может показаться, что встроенная функция слишком проста для некоторых
типов данных.
Определяемая пользователем функция должна иметь два аргумента (указатель
на строку байтов и длина этой строки) и возвращает 32-битную величину
используемую как значение ассоциации.
lorder
Порядок байт для целых чисел в метаданных таблицы.
Число должно представлять порядок байт в целом числе, например,
порядок big endian представляется числом 4321.
Если
lorder
равен 0 (т.е. порядок не определен) используется порядок байт текущей
архитектуры.
Если файл уже существует, то определенная величина будет игнорирована и
использоваться будет порядок байт определенный при создании.
Если файл уже существует (и флаг O_TRUNC не определен), величины определяемые
в параметрах bsize, ffactor, lorder и nelem будут игнорированы
и их значения будут получены из файла.
Если функция для работы с массивом определена, то
hash_open
попытается определить, совпадает ли эта функция с той, что использовалась
при создании файла, и завершается с ошибкой, если это не так.
Обратно совместимый интерфейс определеный в
dbm(3),
и
ndbm(3)
также существует, но он не совместим с предыдущими реализациями по
формату файлов.
НАЙДЕННЫЕ ОШИБКИ
Метод доступа
hash
может завершится с ошибкой и установить переменную
errno
в любое значение, определенное для библиотечной функции
dbopen(3).