NOMBRE¶
mpool - depósito de buffers de memoria compartida
SINOPSIS¶
#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, u_int flags);
int
mpool_put (MPOOL *mp, void *pgaddr, u_int flags);
int
mpool_sync (MPOOL *mp);
int
mpool_close (MPOOL *mp);
DESCRIPCIÓN¶
Mpool es la interfaz de biblioteca destinada a proporcionar un manejo de
buffers de fichero orientado a páginas. Los buffers pueden ser
compartidos entre procesos.
La función
mpool_open inicializa un depósito de memoria. El
argumento
key es la cadena de bytes usada para negociar entre varios
procesos que desean compartir buffers. Si los buffers de fichero se asocian a
memoria compartida, todos los procesos que usen la misma clave
compartirán los buffers. Si
key es NULL, los buffers se asocian a
una memoria privada. El argumento
fd es un descriptor de fichero para
el fichero subyacente, que debe soportar el posicionamiento del puntero de
lectura/escritura (es decir, las búsquedas). Si
key no es NULL y
coincide con un fichero que ya está asociado, el argumento
fd se
ignorará.
El argumento
pagesize es el tamaño, en bytes, de las páginas en
las que se descompone el fichero. El argumento
maxcache es el
número máximo de páginas del fichero subyacente a colocar en
cache en todo momento. Esta valor no es relativo al número de procesos
que comparten los buffers de un fichero, pero será el mayor valor
especificado por cualquiera de los procesos que compartan el fichero.
La función
mpool_filter está destinada a hacer transparente el
procesamiento de la entrada y la salida de las posibles páginas. Si se
especifica la función
pgin, se llamará cada vez que se lea un
buffer al depósito de memoria procedente del fichero de respaldo. Si se
especifica la función
pgout, se llamará cada vez que un
buffer se escriba en el fichero de respaldo. Ambas funciones se llaman con el
puntero
pgcookie, el número de página y un puntero a la
página a leer o escribir.
La función
mpool_new toma un puntero MPOOL y una dirección como
argumentos. Si se puede asignar una nueva página, se devolverá un
puntero a la página y el número de página se almacenará en
la dirección
pgnoaddr. En caso contrario, se devolverá NULL y
se asignará un valor a errno.
La función
mpool_get toma un puntero MPOOL y un número de
página como argumentos. Si la página existe, devolverá un
puntero a la página. En caso contrario, devolverá NULL y se
asignará un valor a errno. El parámetro de opción no se usa
actualmente.
La función
mpool_put desprende la página referenciada por
pgaddr.
Pgaddr debe ser una dirección devuelta previamente
por
mpool_get o
mpool_new. El valor de opción se especifica
haciendo una operación
O-lógica con cualquiera de los
siguientes valores:
- MPOOL_DIRTY
- La página ha sido modificada y necesita ser escrita en
el fichero de respaldo.
Mpool_put devuelve 0 en caso de éxito y -1 si se produce un error.
La función
mpool_sync escribe en el fichero de respaldo todas las
páginas modificadas asociadas con el puntero MPOOL.
Mpool_sync
devuelve 0 en caso de éxito y -1 si se produce un error.
La función
mpool_close libera cualquier memoria reservada asociada
con el depósito de memoria. Las páginas modificadas
no se
escribirán en el fichero de respaldo.
Mpool_close devuelve 0 en
caso de éxito y -1 si se produce un error.
ERRORES¶
La función
mpool_open puede fallar y asignar a
errno
cualquiera de los errores especificados para la rutina de biblioteca
malloc(3).
La función
mpool_get puede fallar y asignar a
errno uno de
los siguiente valores:
- [EINVAL]
- El registro solicitado no exite.
Las funciones
mpool_new y
mpool_get pueden fallar y asignar a
errno cualquiera de los errores especificados para las rutinas de
biblioteca
read(2), write(2) y
malloc(3).
La función
mpool_sync puede fallar y asignar a
errno
cualquiera de los errores especificados para la rutina de biblioteca
write(2).
La función
mpool_close puede fallar y asignar a
errno
cualquiera de los errores especificados para la rutina de biblioteca
free(3).
VÉASE TAMBIÉN¶
dbopen(3),
btree(3),
hash(3),
recno(3)