recno(3)

NUME
recno - metodă de acces la baza de date cu numărul de înregistrare

BIBLIOTECA
Biblioteca C standard (libc, -lc)

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

DESCRIERE
Notează bine: Această pagină documentează interfețele furnizate până la glibc 2.1. Începând cu glibc 2.2, glibc nu mai furnizează aceste interfețe. Probabil că, în schimb, căutați API-urile furnizate de biblioteca libdbb.

Rutina dbopen(3) este interfața bibliotecii cu fișierele de baze de date. Unul dintre formatele de fișiere acceptate este cel al fișierelor cu numere de înregistrare. Descrierea generală a metodelor de accesare a bazei de date se găsește în dbopen(3), această pagină de manual descrie doar informațiile specifice pentru recno.

Structura de date a numărului de înregistrare este formată din înregistrări cu lungime variabilă sau fixă stocate într-un format de fișier plat, accesate prin numărul logic de înregistrare. Existența înregistrării cu numărul cinci implică existența înregistrărilor de la unu la patru, iar ștergerea înregistrării cu numărul unu face ca înregistrarea cu numărul cinci să fie renumerotată în înregistrarea cu numărul patru, iar cursorul, dacă este poziționat după înregistrarea cu numărul unu, să se deplaseze cu o înregistrare în jos.

Structura de date specifică metodei de acces recno furnizată lui dbopen(3) este definită în fișierul de includere <db.h> după cum urmează:

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

Elementele acestei structuri sunt definite după cum urmează:

flags
    Valoarea fanionului este specificată prin combinarea prin OR a oricăreia dintre următoarele valori:

    R_FIXEDLEN
        Înregistrările sunt de lungime fixă, nu sunt delimitate de octeți. Elementul de structură reclen specifică lungimea înregistrării, iar elementul de structură bval este utilizat ca caracter de rezervă. Toate înregistrările inserate în baza de date care au o lungime mai mică de reclen octeți sunt automat completate.

    R_NOKEY
        În interfața specificată de dbopen(3), recuperarea secvențială a înregistrărilor completează atât cheia, cât și structurile de date ale apelantului. În cazul în care se specifică indicatorul R_NOKEY, rutinele cursor nu trebuie să completeze structura cheie. Acest lucru permite aplicațiilor să recupereze înregistrările de la sfârșitul fișierelor fără a citi toate înregistrările intermediare.

    R_SNAPSHOT
        Acest fanion impune ca o imagine instantanee a fișierului să fie luată atunci când este apelat dbopen(3), în loc să permită citirea înregistrărilor nemodificate din fișierul original.

cachesize
    Dimensiunea maximă sugerată, în octeți, a memoriei cache. Această valoare este numai consultativă, iar metoda de acces va aloca mai multă memorie în loc să eșueze. Dacă cachesize este 0 (nu este specificată nicio dimensiune), se utilizează o memorie cache implicită.

psize
    Metoda de acces recno stochează copiile în memorie ale înregistrărilor sale într-un btree. Această valoare reprezintă dimensiunea (în octeți) a paginilor utilizate pentru nodurile din arborele respectiv. Dacă psize este 0 (nu este specificată dimensiunea paginii), dimensiunea paginii este aleasă pe baza dimensiunii blocului de intrare/ieșire din sistemul de fișiere. Pentru mai multe informații, consultați btree(3).

lorder
    Ordinea octeților pentru numerele întregi din metadatele stocate în baza de date. Numărul ar trebui să reprezinte ordinea ca număr întreg; de exemplu, ordinea big endian ar fi numărul 4,321. Dacă lorder este 0 (nu se specifică nicio ordine), se utilizează ordinea curentă a gazdei.

reclen
    Lungimea unei înregistrări de lungime fixă.

bval
    Octetul de delimitare care trebuie utilizat pentru a marca sfârșitul unei înregistrări în cazul înregistrărilor de lungime variabilă și caracterul de umplere în cazul înregistrărilor de lungime fixă. Dacă nu se specifică nicio valoare, se utilizează linii noi („\n”) pentru a marca sfârșitul înregistrărilor de lungime variabilă, iar înregistrările de lungime fixă sunt completate cu spații.

bfname
    Metoda de acces recno stochează copiile în memorie ale înregistrărilor sale într-un btree. Dacă bfname nu este NULL, se specifică numele fișierului btree, ca și cum ar fi specificat ca nume de fișier pentru un dbopen(3) al unui fișier btree.

Partea de date a perechii cheie/date utilizată de metoda de acces recno este aceeași cu cea a altor metode de acces. Cheia este diferită. Câmpul data al cheii trebuie să fie un indicator la o locație de memorie de tip recno_t, așa cum este definit în fișierul de includere <db.h>. Acest tip este, în mod normal, cel mai mare tip integral fără semn disponibil pentru implementare. Câmpul size al cheii trebuie să fie dimensiunea acestui tip.

Deoarece nu pot exista metadate asociate cu fișierele de bază ale metodei de acces recno, orice modificări aduse valorilor implicite (de exemplu, lungimea fixă a înregistrării sau valoarea separatorului de octeți) trebuie să fie specificate în mod explicit de fiecare dată când fișierul este deschis.

În interfața specificată de dbopen(3), utilizarea interfeței put pentru a crea o nouă înregistrare va duce la crearea mai multor înregistrări goale dacă numărul înregistrării este cu mai mult de unu mai mare decât cea mai mare înregistrare existentă în prezent în baza de date.

ERORI-IEȘIRE
Rutinele metodei de acces recno pot eșua și configura errno pentru oricare dintre erorile specificate pentru rutina de bibliotecă dbopen(3) sau pentru următoarele:

EINVAL
    S-a încercat adăugarea unei înregistrări la o bază de date cu lungime fixă care era prea mare pentru a încăpea.

ERORI
Se acceptă numai ordinea big și little endian a octeților.

CONSULTAȚI ȘI
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 nr. UCB/ERL M82/32, mai 1982.

TRADUCERE
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>

Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 (https://www.gnu.org/licenses/gpl-3.0.html) sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.

Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.