MPOOL(3)

NOME
mpool - conjunto de 'buffers' da memória compartilhada

SINÓPSE
#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);

DESCRIÇÃO
Mpool é a interface de biblioteca destinada a oferecer gerenciamento de arquivos de 'buffers', orientados a páginas. Os 'buffers' podem ser compartilhados entre processos.

A função mpool_open inicializa um pool de memória. O argumento key é a cadeia de bytes usada para negociação entre múltiplos processos que desejam compartilhar 'buffers'. Se os 'buffers' de arquivo são mapeados na memória compartilhada, todos os processos usando a mesma chave compartilharão os 'buffers'. Se key é NULO, os 'buffers' são mapeados em memória privada. O argumento fd é um descritor de arquivo para o arquivo subjacente, o qual deve ser indexável (passível de operação seek()). Se key não é NULO e encaixa com um arquivo já sendo mapeado, o argumento fd é ignorado.

O argumento pagesize é o tamanho, em bytes, das páginas nas quais o arquivo está dividido. O argumento maxcache é o número máximo de páginas do arquivo subjacente para guardar no cache em algum momento. Este valor não é relativo ao número de processos que compartilham os 'buffers' de um arquivo, mas será o maior valor especificado por qualquer dos processos compartilhando o arquivo.

A função mpool_filter destina-se a fazer processamento transparente de entrada e saída das páginas possíveis. Se a função pgin é especificada, ela é chamada cada vez que um buffer é lido para o pool de memória do arquivo de fundo. Se a função pgout é especificada, ela é chamada cada vez que um buffer é gravado para o arquivo de fundo. Ambas funções são chamadas com o ponteiro pgcookie, o número da página e um ponterio para a página sendo lida ou gravada.

A função mpool_new recebe um ponteiro MPOOL e um endereço como argumentos. Se uma página nova pode ser alocada, um ponteiro para a página é devolvido e o número da página é guardado no endereço pgnoaddr. Caso contrário, NULO é devolvido e errno é ajustado.

A função mpool_get recebe um ponteiro MPOOL e um número de página como argumentos. Se a página existe, um ponteiro para a página é devolvido. Caso contrário, NULO é devolvido e errno é ajustado. O parâmetro flags não é usado atualmente.

A função mpool_put libera a página (unpins the page) referenciada por pgaddr. Pgaddr deve ser um endereço previamente devolvido por mpool_get ou mpool_new. O valor de flag é especificado através da execução de um or de quaisquer dos valores seguintes:

MPOOL_DIRTY
    A página foi modificada e precisa ser gravada para o arquivo de fundo.

Mpool_put devolve 0 no sucesso e -1 se ocorre um erro.

A função mpool_sync grava todas as páginas modificadas associadas com o ponteiro MPOOLS para o arquivo de fundo. Mpool_sync devolve 0 no sucesso e -1 se ocorre um erro.

A função mpool_close libera qualquer memória alocada associada com o cookie do pool de memória. Páginas modificadas não são gravadas para o arquivo de fundo. Mpool_close devolve 0 no sucesso e -1 se um erro ocorre.

ERROS
A função mpool_open pode falhar e ajustar errno para algum dos erros especificado pela rotina de biblioteca malloc(3).

A função mpool_get pode falhar e ajustar errno para o seguinte:

[EINVAL]
    O registro solicitado não existe.

As funções mpool_new e mpool_get podem falhar e ajustar errno para quaisquer dos erros especificados para as rotinas de biblioteca read(2), write(2), e malloc(3).

A função mpool_sync pode falhar e ajustar errno para quaisquer dos erros especificados para a rotina de biblioteca write(2).

A função mpool_close pode falhar e ajustar errno para quaisquer dos erros especificados para a rotina de biblioteca free(3).

VEJA TAMBÉM
dbopen(3), btree(3), hash(3), recno(3).

TRADUZIDO POR LDP-BR em 28/05/2001.

  Tradução:
Felipe M Pereira <Felipe.Pereira@ic.unicamp.br>

  Revisão.:
André Luiz Fassone <lonely_wolf@ig.com.br>