| DBOPEN(3) | Library Functions Manual | DBOPEN(3) | 
dbopen, db —
#include <sys/types.h>
#include <limits.h>
#include <db.h>
#include <fcntl.h>
DB *
  
  dbopen(const
    char *file, int
    flags, mode_t mode,
    DBTYPE type,
    const void
  *openinfo);
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).
The dbopen() function opens
    file for reading and/or writing. Files never intended
    to be preserved on disk may be created by setting the file parameter 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() function 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, u_int flags);
	int (*fd)(const DB *db);
	int (*get)(const DB *db, DBT *key, DBT *data, u_int flags);
	int (*put)(const DB *db, DBT *key, const DBT *data,
	    u_int flags);
	int (*sync)(const DB *db, u_int flags);
	int (*seq)(const DB *db, DBT *key, DBT *data, u_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.
The parameter flag may be set to the following value:
R_CURSORdelete routines return -1 on error (setting errno), 0 on success, and 1 if the specified key was not in the file.
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.The parameter flag may be set to one of the following values:
R_CURSORR_IAFTERDB_RECNO access method.)R_IBEFOREDB_RECNO access method.)R_NOOVERWRITER_SETCURSORDB_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 only true 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.
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, i.e., 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_CURSORDB_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_FIRSTR_LASTDB_BTREE and DB_RECNO
          access methods.)R_NEXTR_FIRST flag.R_PREVR_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.
The flag value may be set to the following value:
R_RECNOSYNCDB_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.
typedef struct {
	void *data;
	size_t size;
} DBT;
The elements of the DBT structure are defined as follows:
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.
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:
EFTYPEEINVALEFBIGThe 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).
Margo Seltzer and Michael Olson, LIBTP: Portable, Modular Transactions for UNIX, Proceedings of the 1992 Winter USENIX Technical Conference, USENIX Association, 9-25, 1992.
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.
| December 16, 2010 | NetBSD 10.0 |