dbm(3C) dbm(3C)
NAME
dbm: dbminit, dbmclose, fetch, store, delete, firstkey, nextkey -
Schnittstellen zum Zugriff auf dbm-Dateien
SYNTAX
/usr/ucb/cc [flag ...] file ... -ldbm
#include <dbm.h>
typedef struct {
char *dptr;
int dsize;
} datum;
int dbminit(char *file);
int dbmclose(void);
datum fetch(datum key);
int store(datum key, datum content);
int delete(datum key);
datum firstkey(void);
datum nextkey(datum key);
BESCHREIBUNG
Die Funktionen verwalten Paare aus Schlüssel und zugehörigem Inhalt
(key/content) in einer Datenbasis. Die Funktionen können sehr große
Datenbasen bearbeiten und greifen auf ein Objekt in einem oder zwei
Schritten zu.
key und content werden von der Typendefinition (typedef) datum
beschrieben. Ein datum gibt eine Zeichenkette von dsize Byte an, auf
die dptr zeigt. Sowohl beliebige binäre Daten als auch normale ASCII-
Zeichenketten sind zulässig. Die Datenbasis wird in zwei Dateien
gespeichert. Bei einer Datei handelt es sich um ein Verzeichnis mit
dem Suffix .dir, das eine Bitmaske enthält. Die zweite Datei mit dem
Suffix .pag enthält die Daten.
Bevor auf eine Datenbasis zugegriffen werden kann, muß sie mit dbminit
geöffnet werden. Wenn dieser Aufruf erfolgt, müssen die Dateien
file.dir und file.pag vorliegen. Eine leere Datenbasis wird durch
Erstellen von .dir- und .pag-Dateien mit Länge Null erstellt.
Eine Datenbasis kann durch Aufrufen von dbmclose geschlossen werden.
Eine Datenbasis muß geschlossen werden, bevor Sie eine neue öffnen
können.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
dbm(3C) dbm(3C)
Wenn die Datenbasis geöffnet ist, kann auf die unter einem Schlüssel
gespeicherten Daten mit fetch zugegriffen und die Daten können mit
store unter einem Schlüssel gespeichert werden. Ein Schlüssel (mit dem
zugehörigen Inhalt) wird mit delete gelöscht. Ein linearer Durchgang
durch alle Einträge einer Datenbasis kann, in einer (scheinbar) zufäl-
ligen Reihenfolge, unter Verwendung von firstkey und nextkey vorgenom-
men werden. firstkey gibt den ersten Schlüssel in der Datenbasis
zurück. nextkey gibt den jeweils folgenden Schlüssel in der Datenbasis
zurück. Der folgende Code geht die Datenbasis durch:
for (key = firstkey; key.dptr != NULL; key = nextkey(key))
RÜCKGABEWERT
Alle Funktionen, die einen int zurückgeben, weisen mit negativen Rück-
gabewerten auf Fehler hin. Bei Rückgabe einer Null liegt kein Fehler
vor. Routinen, die ein datum zurückgeben, weisen mit einem NULL-dptr-
Zeiger auf Fehler hin.
HINWEISE
Die .pag-Datei enthält leere Bereiche, so daß sie viermal größer
erscheint als ihr tatsächlicher Inhalt.
dptr-Zeiger, die von diesen Routinen zurückgegeben werden, zeigen auf
statischen Speicher, der durch nachfolgende Aufrufe geändert wird.
Die Summe aus den Größen eines key/content-Paares darf die interne
Blockgröße (derzeit 1024 Byte) nicht übersteigen. Außerdem müssen alle
über eine Hash-Liste verbundenen key/content-Paare in einen einzelnen
Block passen. store schlägt in den genannten Fällen fehl und gibt
einen Fehler zurück, wenn ein Plattenblock mit nicht trennbaren Daten
ausgefüllt wird.
Die Reihenfolge der durch firstkey und nextkey angezeigten Schlüssel
hängt lediglich von einer Hash-Funktion ab, die hier nicht weiter von
Bedeutung ist.
Zeitgleiches Aktualisieren und Lesen einer Datenbasis kann zu Inkonsi-
stenzen führen.
Dieselbe Funktionalität ist auch in der Bibliothek libnsl zu finden.
SIEHE AUCH
ar(1), cat(1), cp(1), tar(1), ndbm(3C).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98