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