MPOOL(3)

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)