MPOOL(3)

NOM
mpool, mpool_open, mpool_filter, mpool_new, mpool_get, mpool_put, mpool_sync, mpool_close - Partage d'ensembles de tampons mémoires

SYNOPSIS
#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, unsigned int flags);

int mpool_put(MPOOL *mp, void *pgaddr, unsigned int flags);

int mpool_sync(MPOOL *mp);

int mpool_close(MPOOL *mp);

DESCRIPTION
mpool est l'interface de la bibliothèque fournissant une gestion de fichiers par des tampons mémoires découpés en pages. Les tampons peuvent être partagés entre les processus.

La fonction mpool_open() initialise un ensemble de tampons mémoire. L'argument clé est la chaîne d'octets utilisée pour négocier entre plusieurs processus désireux de partager des tampons. Si les tampons de fichiers sont projetés en mémoire partagée, tous les processus utilisant la même clé partageront les tampons. Si la clé vaut NULL, les tampons 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 tampons 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 tampon 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 tampon 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édemment 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 tampons 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.

ERREURS
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).

CONFORMITÉ
Absente de POSIX.1-2001. Présente sur les systèmes BSD.

VOIR AUSSI
btree(3), dbopen(3), hash(3), recno(3)

TRADUCTION

Ce document est une traduction réalisée par Christophe Blaess <http://www.blaess.fr/christophe/> le 11 mai 1999 et révisée le 17 juillet 2008.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité. La version anglaise la plus à jour de ce document est toujours consultable via la commande : « LANG=C man 3 mpool ». N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute erreur dans cette page de manuel.