mpool- Partage d'ensembles de tampons mémoires
Bibliothèque C standard (
libc,
-lc)
#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, unsigned int flags);
int mpool_put(MPOOL *mp, void *pgaddr, unsigned int flags);
int mpool_sync(MPOOL *mp);
int mpool_close(MPOOL *mp);
NOTE : cette page décrit des interfaces fournies
jusqu'à la glibc 2.1. Depuis la glibc 2.2, la glibc ne
fournit plus ces interfaces. Probablement, vous cherchez plutôt les API
fournies par la bibliothèque
libdb.
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
key 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é
key 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é
key
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écifié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écifié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. L'argument
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.
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).
Absent de POSIX.1. Présent sur les systèmes BSD.
btree(3),
dbopen(3),
hash(3),
recno(3)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]> et David Prévot <
[email protected]>
Cette traduction est une documentation libre ; veuillez vous reporter
à la
GNU
General Public License version 3 concernant les conditions de copie
et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
[email protected]