mpool, mpool_open, mpool_filter, mpool_new, mpool_get, mpool_put, mpool_sync, mpool_close - Partage d'ensembles de buffers mémoires.
#include <db.h>
#include <mpool.h>
MPOOL *
mpool_open (DBT *clé, 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);
Mpool
est l'interface de la bibliothèque fournissant une gestion de fichiers
par des buffers mémoires découpés en pages.
Les buffers peuvent être partagés entre les processus.
La fonction
mpool_open
initialise un ensemble de buffers mémoire.
L'argument
clé
est la chaîne d'octets utilisée pour négocier entre plusieurs processus
désireux de partager des buffers.
Si les buffers de fichiers sont projetés en mémoire partagée, tous les
processus utilisant la même clé partageront les buffers.
Si la
clé
est NULL, les buffers sont projetés en mémoire privée.
L'argument
fd
est un descripteur du fichier sous-jacent qui doit être accessible directement
en n'importe quel point.
Si la
clé
n'est pas NULL et correspond à un fichier déjà projeté, l'argument
fd
est ignoré.
Le fichier est découpé en pages de la taille
pagesize
(en octets).
L'argument
maxcache
est le nombre maximal de pages du fichier sous-jacent, résidant dans le
cache à un instant donné.
Cette valeur ne dépend pas du nombre de processus qui partageront les
buffers d'un fichier, mais la plus grande valeur de tous les processus
partageant le fichier sera prise en compte.
La fonction
mpool_filter
sert à rendre transparent le traitement des pages en entrée et sortie.
Si la fonction
pgin
est spéficiée, elle sera appelée à chaque fois qu'un buffer est lu depuis
le fichier vers la mémoire.
Si la fonction
pgout
est spéficiée, elle sera appelée à chaque fois qu'un buffer est écrit
dans le fichier.
Ces deux fonctions sont appelées avec le pointeur
pgcookie,
le numéro de page, et un pointeur sur la page lue ou écrite.
La fonction
mpool_new
prend en argument un pointeur MPOOL et une adresse.
Si une nouvelle page peut être allouée, elle renvoie un
pointeur sur cette page, et son numéro est stocké à l'adresse
pgnoaddr.
Sinon elle renvoie NULL et remplit
errno.
La fonction
mpool_get
prend en argument un pointeur MPOOL et un numéro de page.
Si la page existe, elle renvoie un pointeur dessus. Sinon elle
renvoie NULL et remplit
errno.
Le paramètre flags n'est pas utilisé actuellement.
La fonction
mpool_put
débloque la page référencée par
pgaddr.
Pgaddr
doit être une adresse que l'on a obtenue précédement avec
mpool_get
ou
mpool_new.
La valeur d'attribut
flags
est indiquée avec un
OU
binaire entre les valeurs suivantes :
- MPOOL_DIRTY
-
La page a été modifiée est doit être ré-écrite dans le fichier.
Mpool_put
renvoie 0 en cas de succès et -1 si une erreur se produit.
La fonction
mpool_sync
écrit toutes les pages modifiées associée au pointeur MPOOL dans le
fichier.
Mpool_sync
renvoie 0 en cas de succès et -1 si une erreur se produit.
La fonction
mpool_close
libère toute mémoire allouée pour l'ensemble de buffers mémoire correspondant
au cookie.
Les pages modifiées ne sont
pas
écrites dans le fichier.
Mpool_close
renvoie 0 en cas de succès et -1 si une erreur se produit.
La fonction
mpool_open
peut échouer et remplir
errno
avec n'importe quel code d'erreur renvoyé par la routine
malloc(3).
La fonction
mpool_get
peut échouer et renvoyer dans
errno
le code suivant :
- [EINVAL]
-
L'enregistrement demandé n'existe pas.
Les fonctions
mpool_new
et
mpool_get
peuvent échouer et remplir
errno
avec n'importe quel code d'erreur renvoyé par les routines
read(2)
,
write(2)
,
et
malloc(3).
La fonction
mpool_sync
peut échouer et renvoyer dans
errno
n'importe quel code d'erreur renvoyé par la routine
write(2).
La fonction
mpool_close
peut échouer et renvoyer dans
errno
n'importe quel code d'erreur renvoyé par la routine
free(3).
Christophe Blaess, 1999-2003.