ИМЯ

recno - метод доступа к базам нумерованных данных

LIBRARY

Standard C library ( libc, -lc)

СИНТАКСИС

#include <sys/types.h> #include <db.h>

ОПИСАНИЕ

Note well: This page documents interfaces provided up until glibc 2.1. Since glibc 2.2, glibc no longer provides these interfaces. Probably, you are looking for the APIs provided by the libdb library instead.
Функция dbopen(3) — это библиотечный интерфейс к файлам баз данных. Один из поддерживаемых форматов файлов — нумерованные данные. Общее описание методов доступа к базам данных находится в dbopen(3). Эта справочная страница содержит только информацию, относящуюся к нумерованным данным.
Структура нумерованных данных может описывать записи переменной или фиксированной длины, хранящиеся в файле в «плоском» формате, и доступные по логическому номеру записи. Существование записи с номером пять подразумевает существование записей от одного до четырёх и удаление записи с номером один вызывает перенумеровывание записи с номером пять в запись с номером четыре, а также сдвиг курсора вниз на одну запись, если он указывает на запись после номера один.
Специальная структура метода доступа к данным recno, предоставляемая dbopen(3), определена в <db.h> следующим образом:

typedef struct {
    unsigned long flags;
    unsigned int  cachesize;
    unsigned int  psize;
    int           lorder;
    size_t        reclen;
    unsigned char bval;
    char         *bfname;
} RECNOINFO;

Элементы этой структуры определены так:
flags
Значение флага определяется логическим ИЛИ следующих значений:
R_FIXEDLEN
Записи фиксированной длины без разделительного байта. Полем reclen определяется длина записи, а поле bval используется как дополняющий символ. Все вставляемые в базу данных записи, размер которых меньше reclen байт, автоматически дополняются.
R_NOKEY
В интерфейсе, определённом dbopen(3), последовательная выборка записей заполняет структуры данных и ключа вызывающего. Если указан флаг R_NOKEY, то процедурам cursor не обязательно заполнять структуру ключа. Это позволяет приложениям извлекать записи из конца файлов без чтения всех промежуточных записей.
R_SNAPSHOT
Этим флагом указывается, чтобы в момент вызова dbopen(3) был сделан снимок (snapshot) файла, а не выполнялось чтение каких-либо не изменённых записей из оригинального файла.
cachesize
Предполагаемый максимальный размер кэша памяти в байтах. Эта величина только рекомендация, метод доступа скорее выделит больше памяти, чем завершится с ошибкой. Если значение cachesize равно 0 (размер не указан), то используется кэш по умолчанию.
psize
Метод доступа recno хранит копии своих записей в памяти в виде дерева btree. Это значение задаёт размер страниц (в байтах), используемых для узлов в этом дереве. Если значение psize равно 0 (размер страницы не указан), то размер выбирается на основе размера блока ввода-вывода нижележащей файловой системы. Подробней смотрите btree(3).
lorder
Порядок расположения байтов, используемый при хранении целых чисел в метаданных базы данных. Число должно отражать порядок размещения в виде целого значения; например, порядок «big endian» должен обозначаться числом 4321. Если lorder равно 0 (порядок не определён), то используется значение по умолчанию, принятое на машине.
reclen
Длина записи фиксированной длины.
bval
Разделительный байт, для использования в качестве отметки конца записи с переменной длиной и как заполняющий символ для записи с фиксированной длиной. Если значение не указано, то для отметки конца записи с переменной длиной используется символ новой строки («\n»), а записи с фиксированной длиной дополняются пробелом.
bfname
Метод доступа recno хранит в памяти копии своих записей в дереве btree. Если значение bfname не равно NULL, то им задаётся имя btree-файла в том же виде, что и при доступе dbopen(3) для доступа к btree-файлу.
Часть «данные» из пары ключ/данные, используемая методом доступа recno, является такой же, как в других методах доступа. Ключ используется иначе. Как следует из определения заголовочного файла <db.h>, поле ключа data должно быть указателем на расположение памяти типа recno_t. Этот тип, обычно, является наибольшим беззнаковым целочисленным типом данных, применяемым в реализации. Значение поля ключа size должен задавать размер этого типа.
Так как в файлах с данными в формате recno могут отсутствовать метаданные, то любые изменения значений по умолчанию (например, длина фиксированной записи или разделяющий байт) должны явно указываться каждый раз при открытии файла.
В интерфейсе, определённым dbopen(3), использование интерфейса 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.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан aereiae <[email protected]>, Azamat Hackimov <[email protected]>, Dmitriy S. Seregin <[email protected]>, Katrin Kutepova <[email protected]>, Lockal <[email protected]>, Yuri Kozlov <[email protected]>, Баринов Владимир и Иван Павлов <[email protected]>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на [email protected]

Recommended readings

Pages related to recno you should read also: