Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

ndbm(3)

DBM(3X)  —  NEWS-OS Programmer’s Manual

名称

dbminit, fetch, store, delete, firstkey, nextkey  −  データベースのサブルーチン

形式

#include <dbm.h>

typedef struct {
    char ∗dptr;
    int dsize;
} datum;

dbminit(file)
char ∗file;

dbmclose()

datum fetch(key)
datum key;

store(key, content)
datum key, content;

delete(key)
datum key;

datum firstkey()

datum nextkey(key)
datum key;

解説

ご注意: dbm ライブラリは ndbm(3) の下位に位置しており、 ndbm を使用して実現されます。 これらの関数は、 データベース内の (key/content) のペアを 保守します。 この関数は非常に大きなデータベース(10億ブロック)を扱い、 1回ないし 2回のファイルシステムアクセスで、 キー付き要素をアクセスします。 これらの関数は、 ローダオプション −ldbm を用いることにより使用できます。

keys と contents は、 datum の typedef によって記述されています。 datum は、 dptr が指している dsize バイトの文字列を指定します。 一般のASCII文字列に加えて、 任意の バイナリデータが指定可能です。 データベースは 2つのファイルに収められます。 1つのファイルはビットマップを含むディレクトリで、 サフィックスとして‘.dir’を 持ちます。 2つ目のファイルは、 すべてのデータを含み、 サフィックスとして‘.pag’を持ちます。

データベースのアクセスが可能になる前に、 dbminit でオープンする必要があります。 この呼び出し時には、 file.dir と file.pag のファイルが存在していなければなりません。 (長さゼロの‘.dir’ファイルと‘.pag’ファイルを 作成することによって、 空のデータベースが作成されます)。

データベースは、 dbmclose を呼ぶことで閉じることができます。 新規のデータベースを開く前に、すでに開いているデータベースを 閉じなければなりません。

一度オープンすると、 キーに記憶されたデータは、 fetch によってアクセスされ、 store によってデータはキーに置かれます。 キー(およびそれに対応する内容)は、 delete によって削除されます。 データベース内のすべてのキーの一次パスは、 firstkey と nextkey を使用して、(見かけ上はほとんど)ランダム順に作成できます。 firstkey はデータベース内の第1キーを返します。 任意のキーについては、 nextkey はデータベース内の次のキーを返します。 次のコードは、 データベースをすべて"なめる"ことになります。

for (key = firstkey(); key.dptr != NULL; key = nextkey(key))

診断

整数 を返す関数はすべて、 エラーの場合 負の値を返します。 正常の場合はゼロを返します。 datum を返すルーチンは、 dptr がナル(0)の場合エラーを表します。

関連事項

ndbm(3)

バグ

‘.pag’ファイルには穴(holes)があるので、 外見のサイズは中身に含まれるサイズの約 4 倍になります。 前の UNIX システムでは、 操作するときにこうした穴に対する実ファイルブロックを 作成できます。 こうしたファイルは穴を埋めなければ、 通常の方法 (cp, cat, tp, tar, ar) ではコピーできません。

この中のサブルーチンが返す dptr ポインタは、 後続の呼び出しによって変更されるスタティック領域を指しています。

(キー/内容)ペアのサイズの合計が、 内部のブロックサイズを越えてはなりません (現在のところ、1024 バイト)。 さらに、 ハッシュ作業を行う(キー/内容)ペアはすべて、 単一ブロック上に納まらなければなりません。 ディスクブロックが、分離できないデータで埋まった場合には、 store がエラーを返します。

delete はファイル空間を再使用できるようにはしますが、 物理的に埋めるわけではありません。

firstkey と nextkey が表すキー順序は、 ハッシュ関数に依存します。

NEWS-OSRelease 4.1C

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