">
ÈÌß
dbminit, fetch, store, delete, firstkey, nextkey - yïpaâëÿeò
áaçoé äaííûx
ÑÈÍÒÀÊÑÈÑ
typedef struct {char *dptr;int dsize;} datum; int dbminit (file) char *file; datum fetch (key) datum key; store (key, content) datum key, content; delete (key) datum key; datum firstkey () datum nextkey (key) datum key;
ÎÏÈÑÀÍÈÅ
Ýòè ôyíêöèè yïpaâëÿþò paáoòoé áaçû äaííûx, â êoòopoé äocòyï
ê êaæäoìy ýëeìeíòy áaçû ocyùecòâëÿeòcÿ ïo êëþ÷y. Ôyíêöèè
ìoãyò oácëyæèâaòü o÷eíü áoëüøèe áaçû äaííûx (äo ìèëëèapäa
áëoêoâ). Äocòyï ïo êëþ÷y ìoæeò áûòü êaê ïpÿìûì, òaê è
ïocëeäoâaòeëüíûì. Ïpoãpaììû, ècïoëüçyþùèe ýòè ôyíêöèè,
äoëæíû êoìïoíoâaòücÿ c ôëaãoì -ldbm.
Ïoëÿ key è content oïècûâaþòcÿ c ïoìoùüþ èìeíè òèïa datum, çaäaþùeão còpoêy èç dsize áaéòoâ, ía êoòopyþ yêaçûâaeò dptr. Äoïycòèìû ïpoèçâoëüíûe äaííûe â äâoè÷íoé cècòeìe c÷ècëeíèÿ è cèìâoëüíûe còpoêè. Áaça äaííûx paçìeùaeòcÿ â äâyx ôaéëax. Ïepâûé ôaéë ýòo êaòaëoã áaçû, coäepæaùèé êapòy pacïpeäeëeíèÿ ïaìÿòè. Bòopoé ôaéë coäepæèò coácòâeíío äaííûe. Èìÿ ïepâoão ôaéëa èìeeò cyôôèêc .dir, èìÿ âòopoão - cyôôèêc .pag.
Äëÿ ïoëy÷eíèÿ äocòyïa ê áaçe ee íyæío oòêpûòü âûçoâoì dbminit. B ìoìeíò oòêpûòèÿ ôaéëû file.dir è file.pag (file - apãyìeíò ôyíêöèè dbminit) äoëæíû cyùecòâoâaòü. Ïycòaÿ áaça coçäaeòcÿ ïyòeì coçäaíèÿ ýòèx ôaéëoâ c íyëeâoé äëèíoé.
Ïocëe oòêpûòèÿ áaçû äaííûe èç íee âûáèpaþòcÿ c ïoìoùüþ ôyíêöèè fetch è çaíocÿòcÿ â íee c ïoìoùüþ ôyíêöèè store. Bûáopêa è çaíeceíèe ïpoèçâoäÿòcÿ c ïoìoùüþ êëþ÷a - apãyìeíòa key. Këþ÷ è câÿçaííûe c íèì äaííûe yíè÷òoæaþòcÿ c ïoìoùüþ ôyíêöèè delete. Ïocëeäoâaòeëüíûé ïpocìoòp âcex êëþ÷eé â áaçe ìoæeò áûòü cäeëaí c ïoìoùüþ ôyíêöèé firstkey è nextkey. Firstkey âoçâpaùaeò ïepâûé êëþ÷ â áaçe, nextkey âoçâpaùaeò êëþ÷, êoòopûé cëeäyeò ça êëþ÷oì, ÿâëÿþùèìcÿ apãyìeíòoì ôyíêöèè. Hèæecëeäyþùèé öèêë ïoçâoëÿeò ïpocìoòpeòü âcþ áaçy:
for(key=firstkey();key.dptr!=NULL;key=nextkey(key))
BOÇÂPAÙAEÌOE ÇÍA×EÍÈE
Ôyíêöèè, âoçâpaùaþùèe öeëûe çía÷eíèÿ, â cëy÷ae oøèáêè
âoçâpaùaþò oòpèöaòeëüíoe ÷ècëo. B cëy÷ae ycïeøíoão
çaâepøeíèÿ âoçâpaùaeòcÿ 0. Ôyíêöèè, âoçâpaùaþùèe çía÷eíèe
òèïa datum, â cëy÷ae oøèáêè ycòaíaâëèâaþò ïoëe dptr â NULL.
ÇAÌE×AÍÈß
Ôaéë `.pag' ìoæeò coäepæaòü ïycòûe oáëacòè, òaê ÷òo eão
oáúeì ìoæeò ïpèìepío â 4 paça ïpeâûøaòü oáúeì xpaíèìûx â
áaçe äaííûx. Ïpeæíèe âepcèè XENIX ïpè oápaùeíèè ê ïycòûì
oáëacòÿì ôaéëa ìoãëè çaíèìaòü ïoä íèx peaëüíûe áëoêè
äècêoâoão ïpocòpaícòâa. Taêèe ôaéëû íe ìoãyò áûòü
cêoïèpoâaíû oáû÷íûìè cpeäcòâaìè (cp, cat, tp, tar, ar) áeç
ïpeäâapèòeëüíoão çaïoëíeíèÿ ïycòûx oáëacòeé.
Óêaçaòeëü dptr â còpyêòypax òèïa datum, âoçâpaùaeìûx íeêoòopûìè ôyíêöèÿìè, yêaçûâaeò còaòè÷ecêyþ oáëacòü ïaìÿòè, êoòopaÿ ïepeçaïècûâaeòcÿ o÷epeäíûì âûçoâoì.
Cyììapíaÿ äëèía ïapû `êëþ÷/äaííûe' íe äoëæía ïpeâûøaòü paçìepa áëoêa (512 áaéòa). Áoëee òoão, âce òaêèe ïapû, èìeþùèe ïpè xeøèpoâaíèè oäío çía÷eíèe, äoëæíû paçìeùaòücÿ â oäíoì áëoêe. Ecëè ýòo íe òaê, store âoçâpaùaeò oøèáêy.
Delete íe èçìeíÿeò oáúeìa ôaéëa, ío äeëaeò yäaëeííûe çaïècè äocòyïíûìè äëÿ íoâoão ècïoëüçoâaíèÿ.
Ïopÿäoê êëþ÷eé, çaäaâaeìûé ôyíêöèÿìè firstkey è nextkey, oïpeäeëÿeòcÿ xeøèpoâaíèeì.
Ýòè ïpoãpaììû íepeeíòepaáeëüíû, ïoýòoìy èx íeëüçÿ ècïoëüçoâaòü äëÿ paáoòû c íecêoëüêèìè áaçaìè oäíoâpeìeíío.