227 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			227 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
| .\"	$NetBSD: mpool.3,v 1.9 2003/08/07 16:42:43 agc Exp $
 | |
| .\"
 | |
| .\" Copyright (c) 1990, 1993
 | |
| .\"	The Regents of the University of California.  All rights reserved.
 | |
| .\"
 | |
| .\" 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. 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.
 | |
| .\"
 | |
| .\"	@(#)mpool.3	8.1 (Berkeley) 6/4/93
 | |
| .\"
 | |
| .Dd April 17, 2003
 | |
| .Dt MPOOL 3
 | |
| .Os
 | |
| .Sh NAME
 | |
| .Nm mpool ,
 | |
| .Nm mpool_open ,
 | |
| .Nm mpool_filter ,
 | |
| .Nm mpool_new ,
 | |
| .Nm mpool_get ,
 | |
| .Nm mpool_put ,
 | |
| .Nm mpool_sync ,
 | |
| .Nm mpool_close
 | |
| .Nd shared memory buffer pool
 | |
| .Sh SYNOPSIS
 | |
| .In db.h
 | |
| .In mpool.h
 | |
| .Ft MPOOL *
 | |
| .Fn mpool_open "DBT *key" "int fd" "pgno_t pagesize" "pgno_t maxcache"
 | |
| .Ft void
 | |
| .Fn mpool_filter "MPOOL *mp" "void (*pgin)(void *, pgno_t, void *)" \
 | |
| "void (*pgout)(void *, pgno_t, void *)" "void *pgcookie"
 | |
| .Ft void *
 | |
| .Fn mpool_new "MPOOL *mp" "pgno_t *pgnoaddr"
 | |
| .Ft void *
 | |
| .Fn mpool_get "MPOOL *mp" "pgno_t pgno" "u_int flags"
 | |
| .Ft int
 | |
| .Fn mpool_put "MPOOL *mp" "void *pgaddr" "u_int flags"
 | |
| .Ft int
 | |
| .Fn mpool_sync "MPOOL *mp"
 | |
| .Ft int
 | |
| .Fn mpool_close "MPOOL *mp"
 | |
| .Sh DESCRIPTION
 | |
| .Nm
 | |
| is the library interface intended to provide page oriented buffer
 | |
| management of files.
 | |
| The buffers may be shared between processes.
 | |
| .Pp
 | |
| The function
 | |
| .Nm mpool_open
 | |
| initializes a memory pool.
 | |
| The
 | |
| .Fa 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
 | |
| .Fa key
 | |
| is
 | |
| .Dv NULL ,
 | |
| the buffers are mapped into private memory.
 | |
| The
 | |
| .Fa fd
 | |
| argument is a file descriptor for the underlying file, which must be
 | |
| seekable.
 | |
| If
 | |
| .Fa key
 | |
| is
 | |
| .No non- Ns Dv NULL
 | |
| and matches a file already being mapped, the
 | |
| .Fa fd
 | |
| argument is ignored.
 | |
| .Pp
 | |
| The
 | |
| .Fa pagesize
 | |
| argument is the size, in bytes, of the pages into which the file is
 | |
| broken up.
 | |
| The
 | |
| .Fa 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.
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_filter
 | |
| function is intended to make transparent input and output processing
 | |
| of the pages possible.
 | |
| If the
 | |
| .Fa pgin
 | |
| function is specified, it is called each time a buffer is read into
 | |
| the memory pool from the backing file.
 | |
| If the
 | |
| .Fa pgout
 | |
| function is specified, it is called each time a buffer is written into
 | |
| the backing file.
 | |
| Both functions are are called with the
 | |
| .Fa pgcookie
 | |
| pointer, the page number and a pointer to the page to being read or
 | |
| written.
 | |
| .Pp
 | |
| The function
 | |
| .Nm 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
 | |
| .Fa pgnoaddr
 | |
| address.
 | |
| Otherwise,
 | |
| .Dv NULL
 | |
| is returned and errno is set.
 | |
| .Pp
 | |
| The function
 | |
| .Nm mpool_get
 | |
| takes a MPOOL pointer and a page number as arguments.
 | |
| If the page exists, a pointer to the page is returned.
 | |
| Otherwise,
 | |
| .Dv NULL
 | |
| is returned and errno is set.
 | |
| The flags parameter is not currently used.
 | |
| .Pp
 | |
| The function
 | |
| .Nm mpool_put
 | |
| unpins the page referenced by
 | |
| .Fa pgaddr .
 | |
| .Fa pgaddr
 | |
| must be an address previously returned by
 | |
| .Nm mpool_get
 | |
| or
 | |
| .Nm mpool_new .
 | |
| The flag value is specified by or'ing any of the following values:
 | |
| .Bl -tag -width MPOOL_DIRTYX -offset indent
 | |
| .It Dv MPOOL_DIRTY
 | |
| The page has been modified and needs to be written to the backing
 | |
| file.
 | |
| .El
 | |
| .Pp
 | |
| .Nm mpool_put
 | |
| returns 0 on success and \-1 if an error occurs.
 | |
| .Pp
 | |
| The function
 | |
| .Nm mpool_sync
 | |
| writes all modified pages associated with the MPOOL pointer to the
 | |
| backing file.
 | |
| .Nm mpool_sync
 | |
| returns 0 on success and \-1 if an error occurs.
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_close
 | |
| function frees up any allocated memory associated with the memory pool
 | |
| cookie.
 | |
| Modified pages are
 | |
| .Em not
 | |
| written to the backing file.
 | |
| .Nm mpool_close
 | |
| returns 0 on success and \-1 if an error occurs.
 | |
| .Sh ERRORS
 | |
| The
 | |
| .Nm mpool_open
 | |
| function may fail and set
 | |
| .Va errno
 | |
| for any of the errors specified for the library routine
 | |
| .Xr malloc 3 .
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_get
 | |
| function may fail and set
 | |
| .Va errno
 | |
| for the following:
 | |
| .Bl -tag -width Er -offset indent
 | |
| .It Er EINVAL
 | |
| The requested record doesn't exist.
 | |
| .El
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_new
 | |
| and
 | |
| .Nm mpool_get
 | |
| functions may fail and set
 | |
| .Va errno
 | |
| for any of the errors specified for the library routines
 | |
| .Xr read 2 ,
 | |
| .Xr write 2 ,
 | |
| and
 | |
| .Xr malloc 3 .
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_sync
 | |
| function may fail and set
 | |
| .Va errno
 | |
| for any of the errors specified for the library routine
 | |
| .Xr write 2 .
 | |
| .Pp
 | |
| The
 | |
| .Nm mpool_close
 | |
| function may fail and set
 | |
| .Va errno
 | |
| for any of the errors specified for the library routine
 | |
| .Xr free 3 .
 | |
| .Sh SEE ALSO
 | |
| .Xr btree 3 ,
 | |
| .Xr dbopen 3 ,
 | |
| .Xr hash 3 ,
 | |
| .Xr recno 3
 | 
