名 前
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/ に 書 か れ て い る 。