RECNO(3)

НАЗВАНИЕ
recno - методы доступа к базам нумерованных данных

СИНТАКСИС
#include <sys/types.h>
#include <db.h>

ОПИСАНИЕ
Функция dbopen - это библиотечный интерфейс для файлов базы данных. Одним из поддерживаемых форматов является формат файлов нумерованных данных (record number files). Основное описание методов доступа к базе данных находится в dbopen(3): это руководство содержит предназначенную только для использования recno информацию.

Структура нумерованных данных может быть записью как переменной, так и фиксированной длины. Данные хранятся в файле, состоящем из однородных записей, доступ к которым осуществляется с помощью номера записи.

Структура данных, специфичная для recno, включена в dbopen и определена в заголовочном файле <db.h> следующим образом:

typedef struct {
    u_long flags;
    u_int cachesize;
    u_int psize;
    int lorder;
    size_t reclen;
    u_char bval;
    char *bfname;
} RECNOINFO;

Элементы этой структуры определены так:

flags
    Значение flag является одним из следующих:

    R_FIXEDLEN
        (записи фиксированной длины, не разделенные байтом. Структурный элемент 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]
    (была сделана попытка добавить слишком большую запись к базе данных фиксированной длины).

СМ. ТАКЖЕ
btree(3) dbopen(3), hash(3), mpool(3),

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.