其他的dbm函式
現在我們已經看到基本的dbm函式,我們可以簡要的介紹一下dbm所使用的其他的函式:
int dbm_delete(dbm *database_descriptor, datum key);
int dbm_error(dbm *database_descriptor);
int dbm_clearerr(dbm *database_descriptor);
datum dbm_firstkey(dbm *database_descriptor);
datum dbm_nextkey(dbm *database_descriptor);
dbm_delete
dbm_delete函式用於由資料庫中刪除記錄。與dbm_fetch類似,他也需要乙個datum引數,所不同的是他並不是讀取資料,而是刪除資料。如果成功,則會返回0。
dbm_error
dbm_error函式只是簡單的測試在資料庫中是否發生了錯誤,如果沒有錯誤則會返回0。
dbm_clearerr
dbm_clearerr函式清除在資料庫中所設定的錯誤條件標記。
dbm_firstkey與dbm_nextkey
這兩個函式用作乙個函式對用於在資料庫中的所有專案的鍵值中進行搜尋。所需要迴圈結構如下:
dbm *db_ptr;
datum key;
for(key = dbm_firstkey(db_ptr); key.dptr; key = dbm_nextkey(db_ptr));
試驗--讀取與刪除資料
現在我們使用這些新函式來修改dbm1.c程式,得到dbm2.c程式:
#include
#include
#include
#include
#include
#include
#define test_db_file 「/tmp/dbm2_test」
#define items_used 3
2 然後我們需要改變的只是讀取部分:
/* now try to delete some data */
sprintf(key_to_use, 「bu%d」, 13);
key_datum.dptr = key_to_use;
key_datum.dsize = strlen(key_to_use);
if (dbm_delete(dbm_ptr, key_datum) == 0)
else
for (key_datum = dbm_firstkey(dbm_ptr);
key_datum.dptr;
key_datum = dbm_nextkey(dbm_ptr))
else
}其輸出結果如下:
$ ./dbm2
data with key bu13 deleted
data retrieved
retrieved item - third 3 baz
data retrieved
retrieved item - first! 47 foo
工作原理
這個程式的前面部分與前面的例子相同,只是簡單的在資料庫中儲存資料。然後我們構建乙個鍵值來匹配第二個專案,並且將其由資料庫中刪除。
程式然後使用dbm_firstkey與dbm_nextkey按順序訪問資料庫中的每乙個鍵值,讀取資料。注意,資料並不是按順序讀取的:不存在按鍵值順序實現的檢索順序;他只是遍歷所有記錄的乙個簡單方法。
資料管理(七)
其他的dbm函式 現在我們已經看到基本的dbm函式,我們可以簡要的介紹一下dbm所使用的其他的函式 int dbm delete dbm database descriptor,datum key int dbm error dbm database descriptor int dbm clear...
資料管理(七)
其他的dbm函式 現在我們已經看到基本的dbm函式,我們可以簡要的介紹一下dbm所使用的其他的函式 int dbm delete dbm database descriptor,datum key int dbm error dbm database descriptor int dbm clear...
第七章 資料管理
記憶體管理 include include char memptr char malloc 1024 分配1k的記憶體 include include char memptr char malloc 1024 分配1k的記憶體 free memptr 釋放記憶體 linux支援虛擬記憶體,核心會將暫...