Go to the previous, next section.
dbm
and ndbm
.
GNU dbm
files are not sparse
. You can copy them with the UNIX
cp
command and they will not expand in the copying process.
There is a compatibility mode for use with programs that already use UNIX
dbm
and UNIX ndbm
.
GNU dbm
has compatibility functions for dbm
. For dbm
compatibility functions, you need the include file dbm.h
.
In this compatibility mode, no gdbm
file pointer is required
by the user, and Only one file may be opened at a time. All users in
compatibility mode are assumed to be writers. If the gdbm
file is a
read only, it will fail as a writer, but will also try to open it as a reader.
All returned pointers in datum structures point to data that gdbm
WILL
free. They should be treated as static pointers (as standard UNIX dbm
does). The compatibility function names are the same as the UNIX dbm
function names. Their definitions follow:
int dbminit(name); int store(key, content); datum fetch(key); int delete(key); datum firstkey(); datum nextkey(key); int dbmclose();
Standard UNIX dbm
and GNU dbm
do not have the same data
format in the file. You cannot access a standard UNIX dbm
file with GNU
dbm
! If you want to use an old database with GNU dbm
, you must
use the conv2gdbm
program.
Also, GNU dbm
has compatibility functions for ndbm
. For
ndbm
compatibility functions, you need the include file ndbm.h
.
Again, just like ndbm
, any returned datum can be assumed to be static
storage. You do not have to free that memory, the ndbm
compatibility
functions will do it for you.
The functions are:
DBM *dbm_open(name, flags, mode);
void dbm_close(file);
datum dbm_fetch(file, key);
int dbm_store(file, key, content
, flags);
int dbm_delete(file, key);
datum dbm_firstkey(file);
datum dbm_nextkey(file);
int dbm_error(file);
int dbm_clearerr(file);
int dbm_dirfno(file);
int dbm_pagfno(file);
int dbm_rdonly(file);
If you want to compile an old C program that used UNIX dbm
or ndbm
and want to use gdbm
files, execute the following cc
command:
cc ... -L /usr/local/lib -lgdbm
Go to the previous, next section.