MPOOL - Linux手册页

时间:2019-08-20 18:00:54  来源:igfitidea点击:

Linux程序员手册 第3部分
更新日期: 2017-09-15

名称

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);

说明

请注意:此页面记录了glibc所提供的接口,直至2.1版。从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()返回的地址。通过对以下任意值进行或运算来指定标志值:

MPOOL_DIRTY
该页面已被修改,需要写入后备文件。

mpool_put()成功返回0,如果发生错误则返回-1。

函数mpool_sync()将与MPOOL指针关联的所有修改后的页面写入后备文件。 mpool_sync()成功返回0,如果发生错误则返回-1。

mpool_close()函数释放与内存池cookie相关的所有已分配内存。修改后的页面不会写入后备文件。 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中。存在于BSD上。

另外参见

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

出版信息

这个页面是Linux手册页项目5.08版的一部分。有关项目的说明、有关报告错误的信息以及此页面的最新版本,请访问https://www.kernel.org/doc/man-pages/