Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ dbm(3C) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ar(1)

cat(1)

cp(1)

tar(1)

ndbm(3C)

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026