Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
mpool - 共有メモリーバッファープール
書式
#include <db.h> #include <mpool.h> MPOOL *mpool_open(DBT *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, unsigned int flags); int mpool_put(MPOOL *mp, void *pgaddr, unsigned int flags); int mpool_sync(MPOOL *mp); int mpool_close(MPOOL *mp);
説明
大事な注意: このページは、バージョン 2.1 までの glibc が提供するインターフェースに ついて 説明している。バージョン 2.2 以降の glibc では、もはやこれらの インターフェースは提供され ていない。おそらく、このページではなく、 libdb ライブラリが提供する API をお探しなのだろ う。 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() が返したアドレスでなければならない。 flag の値は以下の値の論理和で指定する。 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 をセットする。
準拠
POSIX.1-2001 にはない。 BSD 系に存在する。
関連項目
btree(3), dbopen(3), hash(3), recno(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。