dbm_delete() - データベース・レコードの削除

標準

標準/拡張機能 C/C++ 依存項目

XPG4.2
Single UNIX Specification、バージョン 3

両方  

形式

#define _XOPEN_SOURCE_EXTENDED 1
#include <ndbm.h>

int dbm_delete(DBM *db, datum key);

機能説明

dbm_delete() 関数は、データベースからレコードとそのキーを削除します。db 引数には、dbm_open() への直前の呼び出しで戻されたデータベース・ハンドルを指定します。key 引数は、プログラムが削除している レコードを示します。key データは、キーを 指す dptr ポインターと、キー長 の dsize を含んでいなければなりません。

dbm_delete() を呼び出したあと、dbm_firstkey() と dbm_nextkey() によるキーのパススルーの途中で、dbm_firstkey() を呼び出して、アプリケーションの位置をリセットする必要があります。そうしないと、同じキーを何度も検索したり、あるいは キーをまったく検索しないといった 予測できない結果が生じることがあります。

ファイル・スペースが dbm_delete() 命令によって、物理的にレクラメーション処理されることはありません。つまり、ファイルのサイズは削減されませんが、スペースは ハッシュ次第で再利用することができます。

z/OS®UNIX サービスの特殊な動作: マルチスレッド環境では、dbm_delete() 命令によりデータベースに加えられた変更は、データベース・ハンドルを使用するすべてのスレッドに影響します。このため、dbm_nextkey() を使用する前に dbm_firstkey() 関数を使用して、その他のすべてのスレッドの位置もリセットする必要があります。別のスレッドによって、同一 key に対して直前に実行された dbm_fetch() 命令のバッファー・ポインターは、引き続き正しく直前のデータを指しています。dbm_delete() 命令は、これには影響しません。この (今) 削除された key に対する、dbm_fetch() などの他のスレッドに関するその他の命令は、すべて失敗します。

戻り値

正常に実行された場合、dbm_delete() は 0 を戻します。

正常に実行されなかった場合、dbm_delete() は -1 を戻して、errno にエラー値を設定します。また、データベース・エラー標識を設定する場合もあります。

関連情報