mpool — shared memory buffer pool
#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) ; |
Note well: This
page documents interfaces provided in glibc up until version
2.1. Since version 2.2, glibc no longer provides these
interfaces. Probably, you are looking for the APIs provided
by the libdb
library
instead.
Mpool
is the library
interface intended to provide page oriented buffer management
of files. The buffers may be shared between processes.
The function mpool_open
()
initializes a memory pool. The key
argument is the byte string
used to negotiate between multiple processes wishing to share
buffers. If the file buffers are mapped in shared memory, all
processes using the same key will share the buffers. If
key
is NULL, the
buffers are mapped into private memory. The fd
argument is a file
descriptor for the underlying file, which must be seekable.
If key
is non-NULL
and matches a file already being mapped, the fd
argument is ignored.
The pagesize
argument is the size, in bytes, of the pages into which the
file is broken up. The maxcache
argument is the
maximum number of pages from the underlying file to cache at
any one time. This value is not relative to the number of
processes which share a file's buffers, but will be the
largest value specified by any of the processes sharing the
file.
The mpool_filter
() function
is intended to make transparent input and output processing
of the pages possible. If the pgin
function is specified, it
is called each time a buffer is read into the memory pool
from the backing file. If the pgout
function is specified, it
is called each time a buffer is written into the backing
file. Both functions are called with the pgcookie
pointer, the page
number and a pointer to the page to being read or
written.
The function mpool_new
()
takes an MPOOL
pointer and an
address as arguments. If a new page can be allocated, a
pointer to the page is returned and the page number is stored
into the pgnoaddr
address. Otherwise, NULL is returned and errno
is set.
The function mpool_get
()
takes an MPOOL
pointer and a
page number as arguments. If the page exists, a pointer to
the page is returned. Otherwise, NULL is returned and
errno
is set. The flags
argument is not currently
used.
The function mpool_put
()
unpins the page referenced by pgaddr
. pgaddr
must be an address
previously returned by mpool_get
() or mpool_new
(). The flag value is specified by
ORing any of the following values:
MPOOL_DIRTY
The page has been modified and needs to be written to the backing file.
mpool_put
() returns 0 on
success and −1 if an error occurs.
The function mpool_sync
()
writes all modified pages associated with the MPOOL
pointer to the backing file.
mpool_sync
() returns 0 on
success and −1 if an error occurs.
The mpool_close
() function
free's up any allocated memory associated with the memory
pool cookie. Modified pages are not written to the backing file.
mpool_close
() returns 0 on
success and −1 if an error occurs.
The mpool_open
() function
may fail and set errno
for any
of the errors specified for the library routine malloc(3).
The mpool_get
() function may
fail and set errno
for the
following:
The requested record doesn't exist.
The mpool_new
() and
mpool_get
() functions may fail
and set errno
for any of the
errors specified for the library routines read(2), write(2), and malloc(3).
The mpool_sync
() function
may fail and set errno
for any
of the errors specified for the library routine write(2).
The mpool_close
() function
may fail and set errno
for any
of the errors specified for the library routine free(3).
This page is part of release 4.07 of the Linux man-pages
project. A
description of the project, information about reporting bugs,
and the latest version of this page, can be found at
https://www.kernel.org/doc/man−pages/.
Copyright (c) 1990, 1993 The Regents of the University of California. All rights reserved. %%%LICENSE_START(BSD_4_CLAUSE_UCB) Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. %%%LICENSE_END (#)mpool.3 8.1 (Berkeley) 6/4/93 |