Fichier de configuration et sérialisation
Signature : , | Mis en ligne le : 29/01/2013
Catégorie(s) :
  • GNU/Linux Magazine HS
  • Commentez
    Article publié dans :
     
    Page 1/4
    Page suivante »

    Dans toute application un tant soit peu complexe, la lecture et l’enregistrement d’un fichier de configuration finissent par devenir une difficulté récurrente, que ce soit sous la forme de fichiers INI, XML, blobs binaires, ou bases de données. Les EFL (Enlightenment Foundation Libraries) fournissent justement une bibliothèque pour gérer ce problème de manière simple et efficace : Eet

    Cette bibliothèque s'appelle Eet. Son nom est un jeu de mots pour développeurs anglophones, car quand on lie son programme avec eet, on enlève le côté élitiste de cette opération puisqu'on fait : gcc -leet main.c. On voit que les développeurs d'Enlightenment font preuve d'un certain humour dans leur travail... Cette bibliothèque a été créée par le leader du projet Enlightenment pour servir de base aux fichiers de configuration et de thèmes d'E17. Cela implique qu'Eet se devait d'être rapide et légère tout en gardant les fichiers générés portables d'une machine à l'autre. Aujourd'hui, de nouvelles utilisations d'Eet sont apparues pour les applications graphiques utilisant les EFL : par exemple l'utilisation de la logique de sérialisation/désérialisation pour des communications via le réseau ainsi que pour des caches de données (typiquement celles de Freedesktop).

    Le principe de fonctionnement d'Eet est plutôt simple : on décrit les structures que l'on veut sauvergarder/récupérer et Eet s'occupe de générer/parser le fichier qui les contient, tout en garantissant leur portabilité entre machines. Voyons donc comment se passe la déclaration de cette description pour la structure simple ci-dessous :

    Afin de décrire cette structure pour Eet, il suffit de faire :

    La première ligne utile (EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Simple)) permet de décrire à Eet la manière d'allouer de la mémoire et de parcourir les types fournis par Eina, la bibliothèque de données des EFL (listes chaînées, tableaux, hachages, etc.). Il est bien entendu possible d'utiliser d'autres bibliothèques de types de données, mais cela nécessitera d'écrire soi-même la fonction d'initialisation plutôt que d'utiliser l'aide fournie. La seconde ligne crée réellement le descripteur de structure, le descripteur de classe n'étant alors plus utile.

    La série de trois lignes de EET_DATA_DESCRIPTOR_ADD_BASIC est le cœur de l'utilisation d'Eet : chaque ligne décrit les champs du type Simple en précisant leurs nom et type. Eet est capable de sauvegarder tous les types simples du C (int, char, short, long, etc.), mais aussi les types double, float et fixed point tout en assurant une conversion à la lecture vers le type de flottants que vous souhaitez. Cette astuce permet d'écrire très simplement du code fonctionnant en virgule fixe ou flottante en utilisant un simple switch lors de la compilation. Prenons un exemple simple avec les deux types de données suivants :

    Ces deux structures fondamentalement différentes au niveau binaire expriment la même chose. La première le fait sous forme de mantisse et d'exposant (cf. la norme sur les données en virgule flottante du C : http://en.wikipedia.org/wiki/Floating_point) et la seconde en tant que 16 bits de poids fort pour la partie entière et 16 bits de poids faible pour la partie décimale. Mais ces deux représentations tentent toutes deux d'exprimer des nombres réels avec plus ou moins de précision. Ces deux structures étants différentes, il faut deux descripteurs Eet distincts pour les exprimer :

    Ces deux descripteurs permettent de générer (et parser) les mêmes fichiers Eet. Il est ainsi possible d'écrire un fichier avec le premier et de relire ce même fichier avec le second (et inversement). En fait, tous les types de données exprimant des réels sont convertis de la même manière par Eet. Cela devient très pratique lorsqu'il s'agit d'écrire un programme qui doit fournir une adaptation en virgule fixe pour les machines ne disposant que d'une implémentation software des nombres à virgule flottante (tels certains MIPS ou ARM). Ainsi, Edje utilise ce mécanisme pour très fortement diminuer l'utilisation des flottants sur ces machines. L'astuce se situe dans l'appel direct à eet_eina_file_data_descriptor_class_set plutôt que d'utiliser la macro qui remplacerait automatiquement le nom du descripteur par celui du type. En utilisant le même nom, Eet sait que le fichier référence les mêmes données.

    Mais avec tout cela, nous n'avons pas encore vu comment simplement écrire ou lire dans un fichier ! Commençons donc par écrire notre fichier :

    Cet exemple crée un fichier et enregistre la structure Simple (respectivement Flottant) dans une section nommée simple (respectivement reel). Le dernier paramètre d'eet_data_write spécifie si les données doivent être compressées ou non dans le fichier final. Pour des raisons de performances, il peut parfois être nécessaire de ne pas compresser une section dans un fichier eet. C'est pour cela que l'application a la possibilité de faire ce choix. De plus, il n'y a pas réellement de contraintes sur le nombre ou le nom des sections, mais il est recommandé de préfixer les sections que vous créez par le nom de votre bibliothèque ou application. Enfin, lors du eet_close, le fichier est enregistré sur le disque ; il est donc temps d'essayer de le relire :

    Vous souhaitez commenter cet article ?
    Brèves Flux RSS
    Édito : GNU/Linux Magazine Hors-Série N°72
    Édito : Linux Pratique N°84
    Édito : MISC N°74
    Édito : GNU/Linux Magazine N°173
    Édito : MISC Hors-Série N°9
    Communication RSS Com. RSS Presse
    HACKITO ERGO SUM
    GNU/Linux Magazine, partenaire du SymfonyLive Paris
    Opensilicium, partenaire de RTS EMBEDDED
    Linux Pratique et Linux Essentiel, Partenaire de l’Open World Forum
    Gnu/Linux Magazine, Partenaire des JDEV 2013
    Rechercher un article dans notre base documentaire :
    En kiosque Flux RSS

    Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Misc HS est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...

    Le tout nouveau Open Silicium est disponible dès maintenant chez votre marchand de journaux et sur notre site marchand.

    Découvrez le sommaire de ce numéro et un aperçu de ce magazine...

    Lire la suite...