Provided by: manpages-pl-dev_4.27.0-1_all bug

NAZWA

       dbopen - metody dostępu do baz danych

BIBLIOTEKA

       Standardowa biblioteka C (libc, -lc)

SKŁADNIA

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

       DB *dbopen(const char *file, int flags, int mode, DBTYPE type,
                  const void *openinfo);

OPIS

       Ważna  uwaga: Ta strona podręcznika ekranowego opisuje interfejsy dostarczane do glibc 2.1. Od glibc 2.2,
       gblic już nie zawiera tych interfejsów. Najprawdopodobniej to, czego szukasz, to  API  dostarczane  przez
       bibliotekę libdb.

       dbopen()  jest funkcją biblioteczną stanowiącą interfejs do plików baz danych. Obsługiwane formaty plików
       to: btree, rozproszony (hashed) i uniksowy zorientowany na  pliki.  Format  btree  stanowi  reprezentację
       posortowanej, zrównoważonej struktury drzewa. Format rozproszony (hashed) jest rozszerzalnym, dynamicznym
       schematem mieszania. Format płaskiego pliku jest plikiem stanowiącym strumień bajtów z rekordami o stałej
       lub  zmiennej  długości.  Informacje  o  formatach  i  specyficzne  dla poszczególnych formatów plików są
       szczegółowo opisane na odpowiednich stronach podręcznika: btree(3), hash(3) i recno(3)

       dbopen() otwiera plik podany w parametrze file do odczytu i/lub do zapisu. Pliki, których zachowywanie na
       dysku nie jest zamierzone, mogą być tworzone przez ustawienie parametru file na NULL.

       Argumenty flags i mode są takie same, jak  w  funkcji  open(2),  jednakże  brane  pod  uwagę  są  jedynie
       znaczniki   O_CREAT,  O_EXCL,  O_EXLOCK,  O_NONBLOCK,  O_RDONLY,  O_RDWR,  O_SHLOCK oraz O_TRUNC. (Należy
       zauważyć, że nie jest możliwe otwarcie pliku bazy danych jako O_WRONLY).

       Argument type jest typu DBTYPE (który jest zdefiniowany w pliku nagłówkowym  <db.h>)  i  może  przybierać
       wartości DB_BTREE, DB_HASH lub DB_RECNO.

       Argument  openinfo  jest  wskaźnikiem  do  struktury specyficznej dla metody dostępu, opisanej na stronie
       podręcznika danej metody dostępu. Jeśli openinfo jest  równe  NULL,  to  każda  z  metod  dostępu  będzie
       korzystać z wartości domyślnych, właściwych dla systemu i tej metody dostępu.

       dbopen() po pomyślnym zakończeniu zwraca wskaźnik do struktury DB, a NULL w przypadku błędu. Struktura DB
       jest zdefiniowana w pliku nagłówkowym <db.h> i zawiera przynajmniej następujące pola:

           typedef struct {
               DBTYPE type;
               int (*close)(const DB *db);
               int (*del)(const DB *db, const DBT *key, unsigned int flags);
               int (*fd)(const DB *db);
               int (*get)(const DB *db, DBT *key, DBT *data,
                          unsigned int flags);
               int (*put)(const DB *db, DBT *key, const DBT *data,
                          unsigned int flags);
               int (*sync)(const DB *db, unsigned int flags);
               int (*seq)(const DB *db, DBT *key, DBT *data,
                          unsigned int flags);
           } DB;

       Elementy  te  opisują  rodzaj bazy danych i zestaw funkcji wykonujących różne operacje.  Funkcje te biorą
       jako argument wskaźnik do struktury takiej, jak zwracana przez dbopen() i - czasami -  jeden  lub  więcej
       wskaźników do struktur klucz/dane oraz wartość znacznika.

       type   Rodzaj właściwej metody dostępu (i format plików).

       close  Wskaźnik do funkcji zrzucającej zbuforowane informacje ma dysk, zwalniającej przydzielone zasoby i
              zamykającej  podległe  pliki.  Ze względu na to, że pary klucz/dane mogą być buforowane w pamięci,
              niepomyślne  zrzucenie  buforów  pliku  za  pomocą  funkcji  close  lub  sync  może  prowadzić  do
              niespójności  lub  utraty  informacji.  Funkcje  close  zwracają  -1 w przypadku błędu (ustawiając
              errno), a 0 w przypadku pomyślnego zakończenia.

       del    Wskaźnik do funkcji usuwającej pary klucz/dane z bazy danych.

              Argument flag może mieć jedną z następujących wartości:

              R_CURSOR
                     Usuwa rekord wskazywany przez kursor.  Kursor musi zostać wcześniej zainicjowany.

              Funkcje delete zwracają -1  w  przypadku  błędu  (ustawiając  errno),  0  w  przypadku  pomyślnego
              zakończenia albo 1, gdy klucz podany w parametrze key nie występuje w pliku.

       fd     Wskaźnik  do  funkcji  zwracającej  deskryptor  pliku  odpowiadający  używanej  bazie  danych. Dla
              wszystkich procesów wywołujących dbopen()  dla  tej  samej  nazwy  pliku  file  zostanie  zwrócony
              deskryptor  pliku wskazujący na ten sam plik. Tego deskryptora pliku można bezpiecznie używać jako
              argumentu funkcji blokujących fcntl(2) i flock(2).  Deskryptor  pliku  nie  musi  być  związany  z
              którymkolwiek  z  plików  używanych przez daną metodę dostępu.  Deskryptor pliku nie jest dostępny
              dla baz danych zawartych w pamięci.  Funkcje fd zwracają -1 w przypadku błędu (ustawiając  errno),
              a deskryptor pliku w przypadku pomyślnego zakończenia.

       get    Wskaźnik  do  funkcji  stanowiącej  interfejs  dla pobierania danych z bazy według klucza. Adres i
              rozmiar danych związanych z podanym kluczem key są zwracane w strukturze wskazywanej  przez  data.
              Funkcje get zwracają -1 w przypadku błędu (ustawiając errno), 0 w przypadku pomyślnego zakończenia
              albo 1, gdy podany key nie występuje w pliku.

       put    Wskaźnik do funkcji przechowującej pary klucz/dane w bazie danych.

              Parametr flag może mieć jedną z następujących wartości:

              R_CURSOR
                     Zastępuje   parę   klucz/dane   wskazywaną  przez  kursor.  Kursor  musi  zostać  wcześniej
                     zainicjowany.

              R_IAFTER
                     Dołącza dane bezpośrednio po danych wskazywanych przez key, tworząc nową  parę  klucz/dane.
                     Numer  rekordu  dodanej  pary  klucz/dane  jest zwracany w strukturze key. (Dotyczy jedynie
                     metody dostępu DB_RECNO).

              R_IBEFORE
                     Wstawia  dane  bezpośrednio  przed  danymi  wskazywanymi  przez  key,  tworząc  nową   parę
                     klucz/dane.   Numer  rekordu  wstawionej  pary  klucz/dane  jest zwracany w strukturze key.
                     (Dotyczy jedynie metody dostępu DB_RECNO).

              R_NOOVERWRITE
                     Wprowadza nową parę klucz/dane tylko gdy klucz wcześniej nie istniał.

              R_SETCURSOR
                     Przechowuje parę klucz/dane, ustawiając lub inicjując  pozycję  kursora  tak,  aby  na  nią
                     wskazywała. (Dotyczy jedynie metod dostępu  DB_BTREE i DB_RECNO).

              R_SETCURSOR  jest  dostępne jedynie dla metod dostępu DB_BTREE i DB_RECNO, gdyż zakłada, że klucze
              mają ustaloną, niezmienną kolejność.

              R_IAFTER i R_IBEFORE są dostępne jedynie dla metody dostępu DB_RECNO, gdyż każde z  nich  zakłada,
              że  metoda  dostępu  umożliwia  tworzenie  nowych  kluczy. Jest to prawda jedynie w przypadku, gdy
              klucze są uporządkowane i niezależne, na przykład numery rekordów.

              Domyślne zachowanie funkcji put polega na wprowadzeniu nowej pary klucz/dane, zastępując uprzednio
              istniejący klucz.

              Funkcje put zwracają -1 w przypadku błędu (ustawiając errno), 0 w przypadku pomyślnego zakończenia
              oraz 1, gdy flag jest ustawiony na R_NOOVERWRITE, a klucz już istnieje w pliku.

       seq    Wskaźnik do funkcji stanowiącej interfejs dla sekwencyjnego pobierania  danych  z  bazy.  Adres  i
              długość  klucza  są  zwracane  w  strukturze  wskazywanej  przez  key, a adres i rozmiar danych są
              zwracane w strukturze wskazywanej przez data.

              Sekwencyjne pobieranie par klucz/dane może się rozpocząć w dowolnym momencie, a wywołania  funkcji
              del,  get,  put  i  sync  nie  mają  wpływu  na  pozycję  "kursora".  Zmiany  bazy  danych podczas
              sekwencyjnego czytania będą odwzorowane podczas odczytów, tzn. rekordy wstawione za  kursorem  nie
              będą zwrócone, podczas gdy rekordy wstawione przed kursorem zostaną zwrócone.

              Wartość argumentu flag musi być ustawiona na jedną z poniższych wartości:

              R_CURSOR
                     Zwracane  są  dane  stowarzyszone  z  podanym  kluczem. Różni się to od funkcji get tym, że
                     również ustawia lub inicjuje kursor w pozycji  klucza.  (Należy  zauważyć,  że  dla  metody
                     dostępu  DB_BTREE  zwracany klucz nie musi być identyczny z kluczem podanym. Zwracany klucz
                     jest najmniejszym kluczem większym lub równym  podanemu  kluczowi,  dopuszczając  częściowe
                     dopasowywanie klucza i przeszukiwanie zakresów).

              R_FIRST
                     Zwracana  jest  pierwsza  para klucz/dane występująca w bazie danych. Kursor jest ustawiany
                     lub inicjowany tak, by wskazywał tę parę.

              R_LAST Zwracana jest ostatnia para klucz/dane występująca w bazie danych.  Kursor  jest  ustawiany
                     lub  inicjowany  tak,  by  wskazywał tę parę. (Dotyczy jedynie metod dostępu  DB_BTREE oraz
                     DB_RECNO).

              R_NEXT Pobiera parę klucz/dane znajdującą się bezpośrednio po pozycji kursora.  Jeśli  kursor  nie
                     został jeszcze ustawiony, zachowuje się tak samo, jak znacznik R_FIRST.

              R_PREV Pobiera parę klucz/dane znajdującą się bezpośrednio przed pozycją kursora. Jeśli kursor nie
                     został  jeszcze  ustawiony,  zachowuje  się  tak samo jak znacznik R_LAST. (Dotyczy jedynie
                     metod dostępu DB_BTREE i DB_RECNO).

              R_LAST i R_PREV są dostępne jedynie dla metod dostępu DB_BTREE  i  DB_RECNO,  gdyż  zakładają,  że
              klucze mają ustaloną, niezmienną kolejność.

              Funkcje seq zwracają -1 w przypadku błędu (ustawiając errno), 0 w przypadku pomyślnego zakończenia
              albo  1, gdy brak w bazie pary klucz/dane mniejszej lub większej niż podany lub bieżący klucz. Dla
              metody dostępu DB_RECNO, gdy plik bazy danych jest specjalnym plikiem znakowym, a żadna pełna para
              klucz/dane nie jest w danej chwili dostępna, funkcje seq zwracają 2.

       sync   Wskaźnik do funkcji zrzucającej zbuforowane informacje na dysk.  Jeśli baza  danych  znajduje  się
              wyłącznie w pamięci, to funkcja sync nic nie robi i kończy się zawsze pomyślnie.

              Wartość znacznika może być jedną z następujących wartości:

              R_RECNOSYNC
                     Jeśli  używana  jest  metoda DB_RECNO, ten znacznik powoduje, że funkcja sync dotyczy pliku
                     btree stanowiącego bazę pliku numerów rekordów, nie  zaś  samego  pliku  numerów  rekordów.
                     (Więcej informacji znajduje się w opisie pola bfname na stronie podręcznika recno(3)).

              Funkcje  sync  zwracają  -1  w  przypadku  błędu  (ustawiając  errno),  0  w  przypadku pomyślnego
              zakończenia.

   Pary klucz/dane
       Dostęp do wszystkich rodzajów plików jest oparty na parach klucz/dane.  Zarówno klucze,  jak  i  dane  są
       reprezentowane za pomocą następującej struktury danych:

           typedef struct {
               void  *data;
               size_t size;
           } DBT;

       Elementy struktury DBT są zdefiniowane następująco:

       data   Wskaźnik do łańcucha bajtów.

       size   Długość łańcucha bajtów.

       Łańcuchy  bajtowe  klucza  i danych zasadniczo mogą wskazywać na łańcuchy o nieograniczonej długości, ale
       dowolne dwa z nich muszą się mieścić jednocześnie  w  dostępnej  pamięci.   Należy  zauważyć,  że  metody
       dostępu nie dają żadnych gwarancji dotyczących wyrównania łańcuchów bajtowych.

BŁĘDY

       Funkcja  dbopen() może zawieść i ustawić errno na dowolny z błędów określonych dla funkcji bibliotecznych
       open(2) i malloc(3) albo na jeden z następujących błędów:

       EFTYPE Plik jest niepoprawnie sformatowany.

       EINVAL Podano parametr (funkcję mieszającą, bajt wyrównania, itp.) niezgodny z bieżącą specyfikacją pliku
              lub taki, który nie ma sensu dla funkcji (na przykład użycie kursora  bez  uprzedniej  inicjacji),
              lub występuje niezgodność wersji pomiędzy plikiem i oprogramowaniem.

       Funkcje  close  mogą  zawieść  i  ustawić w errno dowolny z błędów określonych dla funkcji bibliotecznych
       close(2), read(2), write(2), free(3) lub fsync(2).

       Funkcje del, get, put i seq mogą zawieść i ustawić w errno  dowolny  z  błędów  określonych  dla  funkcji
       bibliotecznych read(2), write(2), free(3) lub malloc(3).

       Funkcje fd mogą zawieść i ustawić errno na ENOENT dla baz danych w pamięci.

       Funkcje  sync  mogą  zawieść  i  ustawić  w  errno dowolny z błędów określonych dla funkcji bibliotecznej
       fsync(2).

USTERKI

       Nazwa typu DBT jest skrótem od "data base thang", który był używany tylko dlatego, że nikt  nie  wymyślił
       sensownej, jeszcze nieużywanej nazwy.

       Interfejs wykorzystujący deskryptory plików stanowi obejście i będzie w przyszłości usunięty.

       Żadna z metod dostępu nie zapewnia jakiejkolwiek formy dostępu równoległego, blokowania ani transakcji.

ZOBACZ TAKŻE

       btree(3), hash(3), mpool(3), recno(3)

       LIBTP:  Portable, Modular Transactions for UNIX, Margo Seltzer, Michael Olson, USENIX proceedings, Winter
       1992.

TŁUMACZENIE

       Tłumaczenie niniejszej strony podręcznika: Andrzej  Krzysztofowicz  <ankry@green.mf.pg.gda.pl>  i  Robert
       Luberda <robert@debian.org>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją.  Bliższe informacje o warunkach licencji można uzyskać
       zapoznając  się  z  GNU General Public License w wersji 3  lub  nowszej.   Nie   przyjmuje   się   ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy  w  tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej manpages-pl-
       list@lists.sourceforge.net.

4.4 Berkeley Distribution                        2 maja 2024 r.                                        dbopen(3)