スポンサーリンク

MPOOL(3) FreeBSD ライブラリ関数マニュアル MPOOL(3)

名称

mpool − 共有メモリバッファプール

書式

#include <db.h>
#include <mpool.h>

MPOOL *

mpool_open(void *key, int fd, pgno_t pagesize, pgno_t maxcache);

void

       mpool_filter(MPOOL *mp, void (*pgin)(void *, pgno_t, void *),void (*pgout)(void *, pgno_t, void *), void *pgcookie);
void *

mpool_new(MPOOL *mp, pgno_t *pgnoaddr);

void *
mpool_get
(MPOOL *mp, pgno_t pgno, u_int flags);

int
mpool_put
(MPOOL *mp, void *pgaddr, u_int flags);

int
mpool_sync
(MPOOL *mp);

int
mpool_close
(MPOOL *mp);

解説

mpool は、ページを基準にした、ファイルのバッファ管理を行なうライブラリイ ンタフェースです。バッファはプロセス間で共有できます。

関数 mpool_open() はメモリプールを初期化します。引数 key は、バッファを共 有する複数のプロセス間でネゴシエートするために使われるバイトストリングで す。ファイルバッファが共有メモリにマップされた場合は、同じキーを使用して いるすべてのプロセスがバッファを共有します。 key が NULL である場合、バッ ファはプライベートメモリにマップされます。引数 fd は、基礎となるファイル のファイル記述子で、検索可能になっている必要があります。 key が NULL では なく、すでにマップされているファイルと一致する場合、引数 fd は無視されま す。

引数 pagesize は、ファイルを分割するページのサイズ (バイト単位) です。引 数 maxcache は、一度にキャッシュする、基礎となるファイルの最大ページ数で す。この値は、ファイルのバッファを共有するプロセス数とは関係ありません が、ファイルを共有するプロセスが指定した最大値になります。

関数 mpool_filter() は、ページの透過的入出力処理を行ないます。 pgin 関数 が指定されると、保存ファイルからメモリプールにバッファを読み込むたびに呼 び出されます。 pgout 関数が指定されると、保存ファイルにバッファが書き込ま れるたびに呼び出されます。どちらの関数も、 pgcookie ポインタ、ページ番 号、読み書きを行なうページのポインタで呼び出されます。

関数 mpool_new() は、 MPOOL ポインタとアドレスを引数として取ります。新し いページを割り振ることができる場合は、ページのポインタが返され、ページ番 号が pgnoaddr アドレスに保存されます。割り振ることができない場合は NULL が返され、 errno が設定されます。

関数 mpool_get() は、 MPOOL ポインタとページ番号を引数として取ります。 ページが存在する場合は、ページのポインタが返されます。ページが存在しない 場合は NULL が返され、 errno がセットされます。 flags パラメータは、今の ところ使用されていません。

関数 mpool_put() は、 pgaddr が参照するページを解放します。 pgaddr は、あ らかじめ mpool_get() または mpool_new() が返したアドレスでなければなりま せん。 flags パラメータは以下の値の論理和 ( or ) によって指定されます。

       MPOOL_DIRTY

ページが修正されており、保存ファイルに書き込む必要があります。

関数 mpool_put() は、正常終了時には 0 を返し、エラーのときは -1 を返しま す。

関数 mpool_sync() は、 MPOOL ポインタに対して、変更されたすべてのページを 保存ファイルに書き込みます。 mpool_sync() は、正常終了時には 0 を返し、エ ラーのときは -1 を返します。

関数 mpool_close() は、メモリプールクッキーに対して割り振られたメモリを解 放します。修正されたページは、保存ファイルに書き込まれ ません。 mpool_close() は、正常終了時には 0 を返し、エラーのときは -1 を返します。

エラー

関数 mpool_open() でエラーが発生すると、ライブラリルーチン malloc(3) で指 定されたエラーの errno がセットされます。

関数 mpool_get() でエラーが発生すると、以下の errno がセットされます。

       [EINVAL]

要求されたレコードが存在しない。

関数 mpool_new() と mpool_get() でエラーが発生すると、ライブラリルーチン read(2), write(2), malloc(3) で指定されたエラーの errno がセットされま す。

関数 mpool_sync() でエラーが発生すると、ライブラリルーチン write(2) で指 定されたエラーの errno がセットされます。

関数 mpool_close() でエラーが発生すると、ライブラリルーチン free(3) で指 定したエラーの errno がセットされます。

関連項目

btree(3), dbopen(3), hash(3), recno(3)

FreeBSD 10.0 June 4, 1993 FreeBSD 10.0

スポンサーリンク