Функция
dbopen
- это библиотечный интерфейс для файлов базы данных.
Одним из поддерживаемых форматов является формат файлов нумерованных данных
(record number files). Основное описание методов доступа к базе
данных находится в
dbopen(3):
это руководство содержит предназначенную только для использования recno информацию.
Структура нумерованных данных может быть записью как переменной, так и
фиксированной длины. Данные хранятся в файле, состоящем из однородных
записей, доступ к которым осуществляется с помощью номера записи.
Структура данных, специфичная для recno, включена в
dbopen
и определена в заголовочном файле <db.h> следующим образом:
(записи фиксированной длины, не разделенные байтом.
Структурный элемент
reclen
определяет длину записи, а структурный элемент
bval
используется как заполняющий символ.
Все вставленные в базу данных записи, размер которых меньше
reclen
байтов, автоматически удлиняются.);
R_NOKEY
(в интерфейсе, определенном
dbopen,
последовательный поиск записей выполняется среди ключей и в структуре данных.
Если R_NOKEY flag определен, функции
cursor
не обязательно заполняют ключевую структуру.
Это позволяет приложениям извлекать записи из конца файлов, не считывая
все промежуточные (предыдущие) записи.);
R_SNAPSHOT
Этот flag требует, чтобы в момент вызова
dbopen
была взята копия файла, вместо того, чтобы разрешить считывать
с оригинального файла какие-либо неизмененные записи.).
cachesize
- предполагаемый максимальный размер кэша памяти в байтах. Это значение
только
предлагаемое, и средство доступа при необходимости задействует большее
количество памяти. Если
cachesize
равен 0 (размер не определен), используется кэш по умолчанию.
psize
Cредство доступа recno хранит в памяти копии записей в btree.
Эта величина - размер (в байтах) страниц, используемых для узлов в дереве.
Если
psize
равен 0 (размер страниц не определен), то размер страниц выбирается
согласно размеру блока основной файловой системы.
Для получения более полной информации см.
btree(3).
lorder
- байтовый порядок для чисел в метаданных, хранящихся в базе данных.
Номер должен представлять порядок как число, например,
порядок числа big endian - 4,321. Если
lorder
равен 0 (порядок не определен), то используется порядок,
определенный архитектурой машины.
reclen
- фиксированная длина записи.
bval
- разграничивающий байт, отмечающий конец записи с нефиксированной
длиной и заполняющий символ для записей с фиксированной длиной.
Если значение не определено, то для отметки конца нефиксированной
записи используется новая строка (``\n''), а записи с фиксированной
длиной дополняются пробелом.
bfname
Функция recno хранит в памяти копии записей в btree.
Если bfname не равно нулю, оно определяет имя btree-файла.
Часть "данные" из пары ключ/данные, использующейся функцией recno,
является такой же, как в других средствах доступа.
Ключ используется иначе. Как следует из описания файла заголовков библиотеки <db.h>, поле ключа
data
должно служить указателем на расположение памяти типа
recno_t.
Этот тип памяти обычно является аналогом наибольшего типа данных,
доступного в данной реализации. Поле ключа
size
указывает на размер типа.
Из-за того, что метаданных, связанных с основными recno-файлами,
может и не быть, любые внесенные изменения для значений по умолчанию
(фиксированная длина записи или разделяющий байт) должны особо
указываться каждый раз при открытии файла.
В интерфейсе, определенном
dbopen,
использование интерфейса
put
для создания новой записи повлечет за собой создание множества пустых
записей, если номер записи больше, чем номер наибольшей записи в текущей
базе данных.
НАЙДЕННЫЕ ОШИБКИ
Функция
recno
может завершиться появлением ошибки и вписать в переменную
errno
любой код, определенный для
dbopen(3),
а также следующие:
[EINVAL]
(была сделана попытка добавить слишком большую запись к базе данных
фиксированной длины).
Document Processing in a Relational Database System,
Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman,
Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982.
НАЙДЕННЫЕ ОШИБКИ
Поддерживаются только следующие порядки байтов: big endian и little endian.