Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME III. Les librairies utilitaires

10. Le groupe s_vf

Le groupe s_vf organise la gestion d'enregistrements de longueurs variables. Une database de ce type comprend deux fichiers organisés comme suit :

Les fonctions de la librairie peuvent être décomposées en 4 groupes :

Gestion des bases de données

Ouverture et fermeture

Manipulation des enregistrements

Gestion des erreurs

Comment utiliser un fichier à enregistrements variables ?

Avant toute chose, il s'agit de créer la base de données. La fonction VF_db_create se charge de cette fonction. Elle demande, en plus du nom du fichier, de spécifier la taille des blocs dans lesquels seront stockées les données. Le bloc doit dépasser la taille du plus grand des enregistrements d'au moins 16 bytes. Pour obtenir une performance correcte, on utilisera des blocs pouvant contenir un grand nombre d'enregistrements (une centaine par exemple). Si tous les enregistrements sont de petite taille, la taille du bloc sera limité pour éviter les pertes de temps trop grandes lors de la réorganisation dynamique de la base de données. Un blksize normal peut être compris entre 1K et 16K.

Supposons que la base de données soit créée (à l'aide de VF_db_create) et ouverte (par VF_open). Pour stocker un nouvel enregistrement, soit par exemple un texte de 200 caractères, on utilisera la fonction VF_write(). Celle-ci retourne un long (le "handle"), unique pour la base de données, qui doit être soigneusement mémorisé par l'application afin de permettre une relecture plus tard.

Lorsqu'un enregistrement doit être lu, on fait appel à la fonction VF_read() avec pour argument le numéro du handle désiré. Celle-ci alloue un espace correspondant à l'enregistrement, le lit et retourne le pointeur alloué. L'application se chargera de libérer le pointeur (free) lorsqu'il ne sera plus utile.

Pour détruire un enregistrement, il suffit d'appeler la fonction VF_delete() en spécifiant le handle à détruire.

Pour modifier un enregistrement (sans en changer le handle), on utilise la fonction VF_rewrite en spécifiant le handle à modifier, le pointeur vers la nouvelle valeur et la nouvelle longueur.

Limites

Dynamique

Les données peuvent être déplacées dynamiquement à tout moment dans la base de données pour gagner de la place. La taille du fichier de données n'est augmentée que lorsque tous les blocs sont pleins (l'espace détruit est récupéré) : pour cela, les blocs sont périodiquement compressés en cours de traitement. Cela se traduit par un ralentissement momentané du traitement.

10.1 VF_db_create (file s_vfcrea.c:33)

10.2 VF_db_delete (file s_vfdel.c:10)

10.3 VF_db_analyse (file s_vfanal.c:25)

10.4 VF_open (file s_vf.c:17)

10.5 VF_close (file s_vf.c:48)

10.6 VF_write (file s_vf.c:86)

10.7 VF_rewrite (file s_vf.c:123)

10.8 VF_delete (file s_vf.c:220)

10.9 VF_read (file s_vf.c:191)

10.10 VF_error (file s_vferr.c:18)

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be