Se connecter
Se connecter
Inscription
Mot de passe perdu
Connexion:
[Actualités]
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
[Actualités]
Les Technos #469 : Un jour sans fin
[Actualités]
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des perfor...
[Actualités]
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
[Actualités]
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 ser...
[Actualités]
Windows 10 version 22H2 : erreur de mise à jour et de désinstallation
[Actualités]
OpenAI prépare désormais son propre navigateur
[Actualités]
WhatsApp bat Telegram : les transcriptions des messages vocaux arrivent pour tou...
[Actualités]
Unreal et Unreal Tournament désormais gratuits sur Internet Archive
[Actualités]
Windows 10 : Microsoft affiche des publicités en plein écran pour les PC équi...
[Articles]
Dungeons 4 - Nintendo Switch Edition
[Articles]
The Bridge Curse 2 : The Extrication
[Articles]
Farmagia
[Articles]
I*CHU: Chibi Edition
[Articles]
Farming Simulator 25
[Articles]
Goblin Slayer -Another Adventurer- Nightmare Feast
[Articles]
Deel lance des programmes en marque blanche et pour les revendeurs pour plus de ...
[Articles]
ESET Research : WolfsBane, nouvelle porte dérobée de cyber-espionnage Linux cr...
[Articles]
Devoteam présente son nouveau plan stratégique « AMPLIFY » avec un fort acce...
[Articles]
LEGO Horizon Adventures
Actualités
Lettre d'information
Proposer une actualité
Archives
Actualités
Articles
Programmation
Press Release
Matériel
Logiciels
Livres
Interviews
Derniers commentaires
Jeux Vidéos
XBox One
XBox 360
Wii U
PSP
PS4
PS3
PC
DS
GameCube
3DS
Forum
Derniers messages
Informatique
Fun
Divers
Logithèque
Blogs
Divers
A Propos
Annonceurs
Contact
Recherche
RSS
Editer un article
Titre
Mots Clés
Texte
[size=18] [b]Nom[/b] [/size] dbopen - Méthodes d'accès aux bases de données. [size=18] [b]Résumé[/b] [/size] .nf .ft B #include
#include
#include
DB * dbopen(const char *fichier, int attributs, int mode, DBTYPE type_base, .ti +5 const void *openinfo); .ft R .fi [size=18] [b]Description[/b] [/size] [b]Dbopen[/b] est l'interface de bibliothèque pour les fichiers de bases de données. Les formats de fichiers supportés sont les arbres binaires, les fichiers hachés et les fichiers UNIX. L'arbre binaire est une représentation d'une structure équilibrée et triée. Les fichiers hachés représentent des tables de hachage extensibles et dynamiques. Le format de fichier Unix est un flux d'octets avec des enregistrements de longueur fixe ou variable. Les formats et les informations spécifiques aux fichiers sont fournis en détail dans les pages de manuel respectives [b]btree (3),[/b] [b]hash (3)[/b] et [b]recno (3).[/b] Dbopen ouvre le [i]fichier[/i] en lecture et/ou écriture. Les fichiers qui n'ont en aucun cas besoin d'être sauvegardés sur disque peuvent être créés avec le paramètre de fichier à NULL. Les arguments [i]attribut[/i] et [i]mode[/i] doivent être spécifiés pour la routine [b]open (2),[/b] toutefois seuls les attributs O_CREAT, O_EXCL, O_EXLOCK, O_NONBLOCK, O_RDONLY, O_RDWR, O_SHLOCK et O_TRUNC ont un sens. (Notez que l'ouverture d'un fichier de base de données en mode O_WRONLY n'est pas possible.) Le [i]type_base[/i] est un argument ayant le type DBTYPE (défini dans le fichier d'en-tête
) et peut prendre les valeurs DB_BTREE, DB_HASH ou DB_RECNO. L'argument [i]openinfo[/i] est un pointeur vers une structure spécifique à la méthode d'accés décrite dans la page de manuel de cette méthode d'accès. Si [i]openinfo[/i] est NULL, chaque méthode d'accès utilisera un comportement par défaut approprié pour le système et le type de base de données. [i]Dbopen[/i] renvoie un pointeur sur une structure DB s'il réussit, ou NULL en cas d'erreur. La structure DB est définie dans le fichier d'en-tête
et contient, au moins, les champs suivants : .nf typedef struct {[table][row][col] [/col][col] DBTYPE type; int (*close)(const DB *db); int (*del)(const DB *db, const DBT *clé, u_int flags); int (*fd)(const DB *db); int (*get)(const DB *db, DBT *clé, DBT *data, u_int flags); int (*put)(const DB *db, DBT *clé, const DBT *data, .ti +5 u_int flags); int (*sync)(const DB *db, u_int flags); int (*seq)(const DB *db, DBT *clé, DBT *data, u_int flags);[/col][/row][/table] } DB; .fi Ces éléments décrivent un type de base de données et un jeu de fonctions effectuant diverses actions. Ces fonctions reçoivent un pointeur sur une structure semblable à celle renvoyée par [b]dbopen ,[/b] et parfois un ou plusieurs pointeurs sur des structures clés/données et une valeur d'attribut. [table][row][col] [/col][col]type Le type de méthode d'accès sous-jacente (et le type de fichier).[/col][/row][/table] [table][row][col] [/col][col]close Un pointeur sur une routine qui vide vers le disque toutes les informations en cache, libère les ressources allouées, et ferme le(s) fichier(s) de support. Comme les paires clés/données peuvent être cachées en mémoire, l'oubli de synchronisation du fichier avec les fonctions [i]close[/i] ou [i]sync[/i] peut résulter dans des données incohérentes ou perdues. La routine [i]close[/i] renvoie -1 en cas d'erreur (et remplit [b]errno )[/b] et 0 si elle réussit.[/col][/row][/table] [table][row][col] [/col][col]del Un pointeur vers une routine permettant de supprimer des paires clés/données de la base de données.[/col][/row][/table] [table][row][col] [/col][col]Le paramètre [i]flag[/i] peut prendre l'une des valeurs suivantes:[table][row][col] [/col][col][/col][/row][/table] [table][row][col] [/col][col]R_CURSOR Supprimer l'enregistrement référencé par le curseur. Ce curseur doit bien entendu avoir été précédemment positionné.[/col][/row][/table][/col][/row][/table] [table][row][col] [/col][col]La routine [i]delete[/i] renvoie 0 si elle réussit, -1 en cas d'erreur (et remplit [b]errno ),[/b] ou 1 si la [i]clé[/i] indiquée n'a pas été trouvée dans le fichier.[/col][/row][/table] [table][row][col] [/col][col]fd Un pointeur vers une routine qui renvoie le descripteur du fichier représentant la base de données. Le même descripteur de fichier doit être fourni à tous les processus qui invoquent [i]dbopen[/i] avec le même nom de [b]fichier .[/b] Ce descripteur de fichier doit pouvoir servir d'argument aux fonctions de verrouillage [b]fcntl (2)[/b] et [b]flock (2).[/b] Le descripteur de fichier n'est pas nécessairement associé avec l'un des fichiers sous-jacents utilisés par les méthodes d'accès. Aucun descripteur n'est disponible pour les base de données en mémoire. La routine [i]fd[/i] renvoie -1 en cas d'erreur (et remplit [b]errno ),[/b] ou le descripteur de fichiers en cas de succès.[/col][/row][/table] [table][row][col] [/col][col]get Un pointeur vers la routine d'interface de recherche assistée d'une clé dans la base de données. L'adresse et la longueur des données associées avec la [i]clé[/i] indiquée sont fournies dans une structure référencée par l'argument [b]data .[/b] La routine [i]get[/i] renvoie -1 en cas d'erreur (et remplit [b]errno ),[/b] 0 en cas de réussite, ou 1 si la [i]clé[/i] n'a pas été trouvée dans le fichier.[/col][/row][/table] [table][row][col] [/col][col]put Un pointeur vers une routine permettant de stocker les paires clés/données dans la base de données.[/col][/row][/table] [table][row][col] [/col][col]Le paramètre [i]flag[/i] peut prendre l'une des valeurs suivantes :[table][row][col] [/col][col][/col][/row][/table] [table][row][col] [/col][col]R_CURSOR Remplacer la paire clé/donnée référencée par le curseur. Ce curseur doit avoir été positionné précédemment.[/col][/row][/table] [table][row][col] [/col][col]R_IAFTER Ajouter les données immédiatement après les données référencées par la [b]clé ,[/b] créant ainsi une nouvelle paire clé/donnée. Le numéro d'enregistrement de la paire ajoutée est renvoyé dans la structure [i]clé.[/i] (Utilisable uniquement avec la méthode d'accès DB_RECNO)[/col][/row][/table] [table][row][col] [/col][col]R_IBEFORE Ajouter les données immédiatement avant les données référencées par la [b]clé ,[/b] créant ainsi une nouvelle paire clé/donnée. Le numéro d'enregistrement de la paire insérée est renvoyé dans la structure [i]clé.[/i] (Utilisable uniquement avec la méthode d'accès DB_RECNO)[/col][/row][/table] [table][row][col] [/col][col]R_NOOVERWRITE N'ajouter la paire clé/donnée que si la clé n'existe pas précédement.[/col][/row][/table] [table][row][col] [/col][col]R_SETCURSOR Enregistrer la paire clé/donnée, en positionnant ou initialisant la position du curseur pour la référencer. (Utilisable uniquement avec les méthodes d'accès DB_RECNO et DB_TREE)[/col][/row][/table][/col][/row][/table] [table][row][col] [/col][col]R_SETCURSOR n'est disponible que pour les méthodes DB_BTREE et DB_RECNO car cela implique que les clés ont un ordre inhérent immuable.[/col][/row][/table] [table][row][col] [/col][col]R_IAFTER et R_IBEFORE ne sont disponibles qu'avec la méthode DB_RECNO car ils impliquent que la méthode d'accès soit capable de créer de nouvelles clés. Ceci n'est vrai que si les clés sont ordonnées et indépendantes, comme des numéros d'enregistrement.[/col][/row][/table] [table][row][col] [/col][col]Le comportement par défaut de la routine [i]put[/i] est de stocker une nouvelle paire clé/donnée, en remplaçant toute clé existant précédemment.[/col][/row][/table] [table][row][col] [/col][col]Les routines [i]put[/i] renvoient -1 en cas d'erreur (et remplissent [b]errno ),[/b] 0 en cas de succès, ou 1 si l'attribut R_NOOVERWRITE a été indiqué dans [b]flag ,[/b] et si la clé existait déjà dans le fichier.[/col][/row][/table] [table][row][col] [/col][col]seq Un pointeur vers la routine d'interface pour la recherche séquentielle dans la base de données. L'adresse et la longueur de la clé sont renvoyées dans une structure référencée par [b]clé ,[/b] et l'adresse et la longueur des données dans une structure référencée par [b]data .[/b][/col][/row][/table] [table][row][col] [/col][col]La rechercher séquentielle de paire clé/donnée peut avoir lieu à tout moment, et la position du ``curseur'' n'est pas affectée par les routine [b]del ,[/b] [b]get ,[/b] [b]put ,[/b] ou [b]sync .[/b] Les modifications de la base de données durant un balayage séquentiel seront visibles par le balayage, c'est à dire que les enregistrements insérés avant le curseur ne seront pas vus, mais les enregistrements insérés après le curseur seront renvoyés.[/col][/row][/table] [table][row][col] [/col][col]La valeur de [i]flag[/i] [b]doit[/b] être l'une des valeurs suivantes :[table][row][col] [/col][col][/col][/row][/table] [table][row][col] [/col][col]R_CURSOR La routine renvoie les données associées avec la clé indiquée. Ceci est différent du comportement de la routine [i]get[/i] car le curseur est également positionné ou initialisé. (Notez que pour la méthode d'accès DB_BTRE, la clé renvoyée ne correspond pas nécessairement à la clé indiquée. On retourne la plus petite clé supérieure ou égale à celle indiquée, ce qui permet des correspondances partielles ou des recherches d'intervalles).[/col][/row][/table] [table][row][col] [/col][col]R_FIRST On renvoie la première paire clé/donnée de la base, et le curseur est initialisé ou positionné pour la référencer.[/col][/row][/table] [table][row][col] [/col][col]R_LAST On renvoie la dernière paire clé/donnée de la base, et le curseur est initialisé ou positionné pour la référencer. (Disponible uniquement pour les méthodes DB_TREE et DB_RECNO).[/col][/row][/table] [table][row][col] [/col][col]R_NEXT Renvoyer la paire clé/donnée immédiatement après le curseur. Si le curseur n'est pas positionné, le comportement est le même que R_FIRST.[/col][/row][/table] [table][row][col] [/col][col]R_PREV Renvoyer la paire clé/donnée immédiatement avant le curseur. Si le curseur n'est pas positionné, le comportement est le même que R_LAST. (Disponible uniquement pour les méthodes DB_TREE et DB_RECNO).[/col][/row][/table][/col][/row][/table] [table][row][col] [/col][col]R_LAST et R_PREV ne sont disponibles que pour les méthodes DB_BTREE et DB_RECNO car ils impliquent que les clés aient un ordre inhérent immuable.[/col][/row][/table] [table][row][col] [/col][col]La routine [i]seq[/i] renvoie -1 en cas d'erreur (et remplit [b]errno ),[/b] 0 en cas de succès, et 1 s'il n'y a pas de paire clé/donnée supérieure ou égale à la clé indiquée ou courante. Si on tuilise la méthode DB_RECNO, si le fichier de base de données est un fichier spécial en mode caractères, et si aucune paire clé/donnée complète n'est actuellement disponible, la routine [i]seq[/i] renvoie 2.[/col][/row][/table] [table][row][col] [/col][col]sync Un pointeur vers une routine permettant de vider sur disque toutes les informations en cache. Si la base de données est uniquement en mémoire, la routine [i]sync[/i] n'a pas d'effet, et réussira toujours.[/col][/row][/table] [table][row][col] [/col][col]La valeur de [i]flag[/i] peut être la suivante :[table][row][col] [/col][col][/col][/row][/table] [table][row][col] [/col][col]R_RECNOSYNC Si on utilise la méthode DB_RECNO, cet attribut oblige la synchronisation à s'appliquer au fichier B-Tree sous-jacent au fichier RecNo, et non pas à ce dernier. (voir le champs [i]bfname[/i] de la page de manuel [b]recno (3)[/b] pour plus d'informations.)[/col][/row][/table][/col][/row][/table] [table][row][col] [/col][col]La routine [i]sync[/i] renvoie -1 en cas d'erreur (et remplit [b]errno )[/b] ou 0 en cas de réussite.[/col][/row][/table] [size=18] [b]Paires clÉs/donnÉes[/b] [/size] L'accès à tous les types de fichiers est basé sur les paires clés/données. La structure de donnée suivante représente à la fois les clés et les données. typedef struct {[table][row][col] [/col][col] void *data; [b][/b] size_t size;[/col][/row][/table] } DBT; Les éléments de la structure DBT sont définis ainsi : [table][row][col] [/col][col]data Un pointeur vers une chaîne d'octets.[/col][/row][/table] [table][row][col] [/col][col]size La longueur de la chaîne d'octets[/col][/row][/table] Les chaînes d'octets des clés et des données peuvent avoir n'importe quelle longueur, avec la limitation que deux quelconques d'entre-elles doivent pouvoir tenir simultanément en mémoire. Remarquez que les méthodes d'accès ne fournissent aucune garantie en ce qui concerne les alignements des chaînes d'octets. [size=18] [b]Erreurs[/b] [/size] La routine [i]dbopen[/i] peut échouer et placer dans [i]errno[/i] n'importe laquelle des erreurs renvoyées par les routines [b]open (2)[/b] et [b]malloc (3)[/b] ou l'une des erreurs suivantes : [table][row][col] [/col][col][EFTYPE] Un fichier est mal formatté.[/col][/row][/table] [table][row][col] [/col][col][EINVAL] Un paramètre indiqué (par exemple fonction de hachage) est incompatible avec les spécifications du fichier actuel, ou n'a pas de sens pour la fonction (par exemple utiliser le curseur sans initialisation préalable). Ou encore, il y a une incompatibilité dans les numéros de version du fichier et du logiciel.[/col][/row][/table] Les routines [i]close[/i] peuvent échouer et fournir dans [i]errno[/i] l'une quelconque des erreurs indiquées par les routines de bibliothèque [b]close (2),[/b] [b]read (2),[/b] [b]write (2),[/b] [b]free (3),[/b] ou [b]fsync (2).[/b] Les routines [b]del ,[/b] [b]get ,[/b] [i]put[/i] et [i]seq[/i] peuvent échouer et fournir dans [i]errno[/i] l'une quelconque des erreurs indiquées par les routines de bibliothèque [b]read (2),[/b] [b]write (2),[/b] [b]free (3)[/b] ou [b]malloc (3).[/b] Les routine [i]fd[/i] peuvent échouer et remplir [i]errno[/i] avec l'erreur ENOENT pour les bases de données en mémoire. Les routines [i]sync[/i] peuvent échouer et fournir dans [i]errno[/i] l'une quelconque des erreurs indiquées par la routine de bibliothèque [b]fsync (2).[/b] [size=18] [b]Voir aussi[/b] [/size] [b]btree (3),[/b] [b]hash (3),[/b] [b]mpool (3),[/b] [b]recno (3)[/b] [b]LIBTP: Portable, Modular Transactions for UNIX ,[/b] Margo Seltzer, Michael Olson, USENIX proceedings, Winter 1992. [size=18] [b]Bugs[/b] [/size] Le typedef DBT est un mnémonique pour ``data base thang'', qui a été choisi car personne n'arrivait à trouver un nom raisonnable et pas encore utilisé. L'interface avec les descripteurs de fichiers est une bidouille et sera supprimée dans les versions futures de l'interface. Aucune méthode d'accès ne fournit de transactions, de verrouillages ou d'accès concurrents. [size=18] [b]Traduction[/b] [/size] Christophe Blaess, 1999-2003.
Fichier
Forum
-
Derniers messages
Bavardages
Aujourd'hui, je rénove ou je construis ^^
Software
problème sur windows 10
Réseaux et Télécom
Administrateur Réseau - Cisco
Réseaux et Télécom
Problème wifi (POE)
Software
Postfix - Need help
Bavardages
Oh râge oh désespoir !
Programmation
Enregistrement client et envoi mail
Software
SÉCURITÉ MACBOOK
Hardware
conseil matos réseau?
Hardware
nVidia Shield Android TV
Actualités
-
Archives
Matériel
Nvidia prévient d'une pénurie de GPU ce trimestre, avec une reprise début 2025
Les Technos
Les Technos #469 : Un jour sans fin
Jeux Vidéos
Test Farming Simulator 25 (PS5) - Des innovations intéressantes mais des performances à revoir
Matériel
Qualcomm souhaite réduire davantage les prix des PC Windows basés sur ARM
Tablettes
Finalement, Google préparerait une nouvelle tablette mais la Pixel Tablet 2 serait abandonnée
Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be
- © 2002-2024
Akretio
SPRL - Generated via
Kelare
The Akretio Network:
Akretio
-
Freedelity
-
KelCommerce
-
Votre publicité sur informaticien.be ?