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)