Книга: Разработка приложений в среде Linux. Второе издание

25.2.1. Открытие файла qdbm

25.2.1. Открытие файла qdbm

Библиотечная функция dpopen() используется для открытия файлов базы данных.

#include <depot.h>
DB * dpopen(const char * filename, int omode, int bnum);

Первый аргумент представляет имя файла, который будет использоваться для базы данных[176]. Аргумент omode определяет способ доступа к файлу, и должен иметь одно из двух значений: DP_OREADER и DP_OWRITER, в зависимости от того, какой вид доступа к базе данных необходим программе — для чтения или для записи. По умолчанию база данных блокируется, чтобы разрешить нескольким программам доступ для чтения или одной программе доступ для записи. Если приложению не нужна блокировка, производимая qdbm, то DP_ONOLCK может быть объединен с omode битовым "ИЛИ".

Когда приложения создают новые базы данных, они должны также использовать битовое "ИЛИ" с DP_CREAT для отправки qdbm запроса на создание нового файла, если он еще не был создан. Флаг DP_OTRUNC сигнализирует о том, что первоначальное содержимое filename будет удалено и заменено пустой базой данных.

Последний параметр функции dpopen(), bnum, сообщает qdbm о том, сколько сегментов памяти нужно задействовать в хеш-массиве. Чем меньшим будет значение этого параметра, тем меньший размер будет иметь база данных; чем больше будет его значение, тем быстрее она будет работать благодаря сокращению количества конфликтных ситуаций в хеш-памяти. В документации к qdbm рекомендуется, чтобы это значение составляло от половины до величины, в четыре раза большей от того количества элементов, которые, предположительно, будет иметь база данных[177]. Если вы не уверены, какое следует использовать значение, можно присвоить нулевое значение, которое является значением по умолчанию[178].

Функция dpopen() возвращает указатель на структуру DEPOT, который передается остальным функциям Depot. В случае возникновения ошибки функция dpopen() возвращает NULL и устанавливает dpecode.

Оглавление книги


Генерация: 0.192. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз