hash(3) Library Functions Manual hash(3) NUME hash - metoda de acces la baza de date a sumelor ce control (hash) BIBLIOTECA Biblioteca C standard (libc, -lc) SINOPSIS #include #include DESCRIERE Noteaza bine: Aceasta pagina documenteaza interfeele furnizate pana la glibc 2.1. Incepand cu glibc 2.2, glibc nu mai furnizeaza aceste interfee. Probabil ca, in schimb, cautai API-urile furnizate de biblioteca libdbb. Rutina dbopen(3) este interfaa bibliotecii cu fiierele de baze de date. Unul dintre formatele de fiiere acceptate este cel al fiierelor hash. Descrierea generala a metodelor de acces la baza de date se gasete in dbopen(3), iar aceasta pagina de manual descrie doar informaiile specifice hash. Structura de date de sume de control este o schema de baza de date extensibila i dinamica. Structura de date specifica metodei de acces furnizata lui dbopen(3) este definita in fiierul de includere dupa cum urmeaza: typedef struct { unsigned int bsize; unsigned int ffactor; unsigned int nelem; unsigned int cachesize; uint32_t (*hash)(const void *, size_t); int lorder; } HASHINFO; Elementele acestei structuri sunt urmatoarele: bsize definete dimensiunea ,,galeii" (bucket) tabelului sumelor de control i este, in mod implicit, de 256 de octei. Poate fi preferabil sa se mareasca dimensiunea paginii pentru tabelele rezidente pe disc i pentru tabelele cu elemente de date mari. ffactor indica o densitate dorita in cadrul tabelului sumelor de control (hash). Este o aproximare a numarului de chei care pot fi acumulate intr-o singura galeata (bucket), determinand momentul in care tabelul sumelor de control crete sau se micoreaza. Valoarea implicita este 8. nelem este o estimare a dimensiunii finale a tabelului sumelor de control. Daca nu este definita sau valoarea definita este prea mica, tabelele sumelor de control se vor extinde in mod elegant pe masura ce sunt introduse chei, dei se poate observa o uoara degradare a performanei. Valoarea implicita este 1. cachesize este dimensiunea maxima sugerata, in octei, a spaiului de prestocare (cache). Aceasta valoare este doar consultativa, iar metoda de acces va aloca mai multa memorie in loc sa eueze. hash este o funcie hash() definita de utilizator. Deoarece nicio funcie hash() nu funcioneaza la fel de bine pentru toate datele posibile, utilizatorul poate constata ca funcia hash() incorporata nu funcioneaza bine pentru un anumit set de date. O funcie hash() definita de utilizator trebuie sa primeasca doua argumente (un indicator la un ir de octei i o lungime) i sa returneze o cantitate de 32 de bii care sa fie utilizata ca valoare a sumei de control (hash). lorder este ordinea octeilor pentru numerele intregi din metadatele stocate in baza de date. Numarul ar trebui sa reprezinte ordinea ca numar intreg; de exemplu, ordinea big endian ar fi numarul 4,321. Daca lorder este 0 (nu este specificata nicio ordine), se utilizeaza ordinea curenta a gazdei. Daca fiierul exista deja, valoarea specificata este ignorata i se utilizeaza valoarea specificata la crearea arborelui. In cazul in care fiierul exista deja (i nu este specificat fanionul O_TRUNC), valorile specificate pentru bsize, ffactor, lorder i nelem sunt ignorate i se utilizeaza valorile specificate la crearea arborelui. Daca este specificata o funcie hash(), hash_open incearca sa determine daca funcia hash specificata este aceeai cu cea cu care a fost creata baza de date i eueaza daca nu este aa. Sunt furnizate interfee retro-compatibile cu rutinele descrise in dbm(3) i ndbm(3), insa aceste interfee nu sunt compatibile cu formatele de fiiere anterioare. ERORI-IEIRE Rutinele metodei de acces hash pot eua i pot configura errno pentru oricare dintre erorile specificate pentru rutina de biblioteca dbopen(3). ERORI Se accepta numai ordinea big i little endian a octeilor. CONSULTAI I btree(3), dbopen(3), mpool(3), recno(3) Dynamic Hash Tables, Per-Ake Larson, Communications of the ACM, aprilie 1988. A New Hash Package for UNIX, Margo Seltzer, USENIX Proceedings, iarna anului 1991. TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . 4.4 Berkeley Distribution 2 mai 2024 hash(3)