Provided by: manpages-dev_3.54-1ubuntu1_all bug

NAME

       dbopen - database access methods

SYNOPSIS

       #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);

DESCRIPTION

       Note  well:  This  page  documents interfaces provided in glibc up until version 2.1.  Since version 2.2,
       glibc no longer provides these interfaces.  Probably, you are looking for the APIs provided by the  libdb
       library instead.

       dbopen()  is  the  library interface to database files.  The supported file formats are btree, hashed and
       UNIX file oriented.  The btree format is a representation of a  sorted,  balanced  tree  structure.   The
       hashed  format is an extensible, dynamic hashing scheme.  The flat-file format is a byte stream file with
       fixed or variable length records.  The formats and file format  specific  information  are  described  in
       detail in their respective manual pages btree(3), hash(3) and recno(3).

       dbopen()  opens  file  for  reading  and/or writing.  Files never intended to be preserved on disk may be
       created by setting the file argument to NULL.

       The flags and mode arguments are as specified to the open(2) routine, however, only the O_CREAT,  O_EXCL,
       O_EXLOCK,  O_NONBLOCK,  O_RDONLY,  O_RDWR,  O_SHLOCK, and O_TRUNC flags are meaningful.  (Note, opening a
       database file O_WRONLY is not possible.)

       The type argument is of type DBTYPE (as defined in the <db.h> include file) and may be set  to  DB_BTREE,
       DB_HASH, or DB_RECNO.

       The  openinfo  argument  is  a  pointer  to  an  access method specific structure described in the access
       method's manual page.  If openinfo is NULL, each access method will  use  defaults  appropriate  for  the
       system and the access method.

       dbopen()  returns  a pointer to a DB structure on success and NULL on error.  The DB structure is defined
       in the <db.h> include file, and contains at least the following fields:

           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;

       These elements describe a database type and  a  set  of  functions  performing  various  actions.   These
       functions  take  a  pointer to a structure as returned by dbopen(), and sometimes one or more pointers to
       key/data structures and a flag value.

       type   The type of the underlying access method (and file format).

       close  A pointer to a routine to flush any cached information to disk, free any allocated resources,  and
              close  the  underlying file(s).  Since key/data pairs may be cached in memory, failing to sync the
              file with a close or sync function may result in inconsistent or lost information.  close routines
              return -1 on error (setting errno) and 0 on success.

       del    A pointer to a routine to remove key/data pairs from the database.

              The argument flag may be set to the following value:

              R_CURSOR
                     Delete  the  record  referenced  by  the  cursor.   The  cursor  must  have previously been
                     initialized.

              delete routines return -1 on error (setting errno), 0 on success, and 1 if the specified  key  was
              not in the file.

       fd     A  pointer to a routine which returns a file descriptor representative of the underlying database.
              A file descriptor referencing the same file will be returned to all processes which call  dbopen()
              with  the  same file name.  This file descriptor may be safely used as an argument to the fcntl(2)
              and flock(2) locking functions.  The file descriptor is not necessarily associated with any of the
              underlying  files  used  by  the  access  method.   No  file descriptor is available for in memory
              databases.  fd routines return -1 on error (setting errno), and the file descriptor on success.

       get    A pointer to a routine which is the interface for keyed retrieval from the database.  The  address
              and  length of the data associated with the specified key are returned in the structure referenced
              by data.  get routines return -1 on error (setting errno), 0 on success, and 1 if the key was  not
              in the file.

       put    A pointer to a routine to store key/data pairs in the database.

              The argument flag may be set to one of the following values:

              R_CURSOR
                     Replace  the  key/data pair referenced by the cursor.  The cursor must have previously been
                     initialized.

              R_IAFTER
                     Append the data immediately after the data referenced by key, creating a new key/data pair.
                     The  record  number  of  the  appended  key/data  pair  is  returned  in the key structure.
                     (Applicable only to the DB_RECNO access method.)

              R_IBEFORE
                     Insert the data immediately before the data referenced by  key,  creating  a  new  key/data
                     pair.   The  record  number of the inserted key/data pair is returned in the key structure.
                     (Applicable only to the DB_RECNO access method.)

              R_NOOVERWRITE
                     Enter the new key/data pair only if the key does not previously exist.

              R_SETCURSOR
                     Store the key/data pair, setting or initializing the position of the  cursor  to  reference
                     it.  (Applicable only to the DB_BTREE and DB_RECNO access methods.)

              R_SETCURSOR is available only for the DB_BTREE and DB_RECNO access methods because it implies that
              the keys have an inherent order which does not change.

              R_IAFTER and R_IBEFORE are available only for the DB_RECNO access method because they  each  imply
              that  the access method is able to create new keys.  This is true only if the keys are ordered and
              independent, record numbers for example.

              The default behavior of the put routines  is  to  enter  the  new  key/data  pair,  replacing  any
              previously existing key.

              put routines return -1 on error (setting errno), 0 on success, and 1 if the R_NOOVERWRITE flag was
              set and the key already exists in the file.

       seq    A pointer to a routine which is the interface for sequential retrieval  from  the  database.   The
              address and length of the key are returned in the structure referenced by key, and the address and
              length of the data are returned in the structure referenced by data.

              Sequential key/data pair retrieval may begin at any time, and the position of the "cursor" is  not
              affected  by calls to the del, get, put, or sync routines.  Modifications to the database during a
              sequential scan will be reflected in the scan, that is, records inserted behind  the  cursor  will
              not be returned while records inserted in front of the cursor will be returned.

              The flag value must be set to one of the following values:

              R_CURSOR
                     The data associated with the specified key is returned.  This differs from the get routines
                     in that it sets or initializes the cursor to the location of the key as well.   (Note,  for
                     the  DB_BTREE  access  method,  the  returned key is not necessarily an exact match for the
                     specified key.  The returned key is the smallest key greater than or equal to the specified
                     key, permitting partial key matches and range searches.)

              R_FIRST
                     The  first  key/data pair of the database is returned, and the cursor is set or initialized
                     to reference it.

              R_LAST The last key/data pair of the database is returned, and the cursor is set or initialized to
                     reference it.  (Applicable only to the DB_BTREE and DB_RECNO access methods.)

              R_NEXT Retrieve  the  key/data  pair  immediately after the cursor.  If the cursor is not yet set,
                     this is the same as the R_FIRST flag.

              R_PREV Retrieve the key/data pair immediately before the cursor.  If the cursor is  not  yet  set,
                     this  is the same as the R_LAST flag.  (Applicable only to the DB_BTREE and DB_RECNO access
                     methods.)

              R_LAST and R_PREV are available only for the DB_BTREE and DB_RECNO  access  methods  because  they
              each imply that the keys have an inherent order which does not change.

              seq routines return -1 on error (setting errno), 0 on success and 1 if there are no key/data pairs
              less than or greater than the specified or current key.  If the DB_RECNO access  method  is  being
              used,  and  if  the  database  file is a character special file and no complete key/data pairs are
              currently available, the seq routines return 2.

       sync   A pointer to a routine to flush any cached information to disk.  If  the  database  is  in  memory
              only, the sync routine has no effect and will always succeed.

              The flag value may be set to the following value:

              R_RECNOSYNC
                     If  the DB_RECNO access method is being used, this flag causes the sync routine to apply to
                     the btree file which underlies the recno file, not the recno file itself.  (See the  bfname
                     field of the recno(3) manual page for more information.)

              sync routines return -1 on error (setting errno) and 0 on success.

   Key/data pairs
       Access to all file types is based on key/data pairs.  Both keys and data are represented by the following
       data structure:

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

       The elements of the DBT structure are defined as follows:

       data   A pointer to a byte string.

       size   The length of the byte string.

       Key and data byte strings may reference strings of essentially unlimited length although any two of  them
       must  fit  into available memory at the same time.  It should be noted that the access methods provide no
       guarantees about byte string alignment.

ERRORS

       The dbopen() routine may fail and set errno for any of the errors  specified  for  the  library  routines
       open(2) and malloc(3) or the following:

       EFTYPE A file is incorrectly formatted.

       EINVAL A  parameter  has  been  specified  (hash  function, pad byte, etc.) that is incompatible with the
              current file specification or which is not meaningful for the function (for example,  use  of  the
              cursor without prior initialization) or there is a mismatch between the version number of file and
              the software.

       The close routines may fail and set errno for any of  the  errors  specified  for  the  library  routines
       close(2), read(2), write(2), free(3), or fsync(2).

       The del, get, put and seq routines may fail and set errno for any of the errors specified for the library
       routines read(2), write(2), free(3) or malloc(3).

       The fd routines will fail and set errno to ENOENT for in memory databases.

       The sync routines may fail and set errno for  any  of  the  errors  specified  for  the  library  routine
       fsync(2).

BUGS

       The  typedef  DBT  is  a  mnemonic  for  "data  base thang", and was used because no-one could think of a
       reasonable name that wasn't already used.

       The file descriptor interface is a kludge and will be deleted in a future version of the interface.

       None of the access methods provide any form of concurrent access, locking, or transactions.

SEE ALSO

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

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

COLOPHON

       This  page  is  part  of  release 3.54 of the Linux man-pages project.  A description of the project, and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.