Projet d’Introduction au Système
Licence 2ème année

Gilles Roussel

À réaliser par groupe de deux au maximum.
http://igm.univ-mlv.fr/~roussel/L22/projet.html
À rendre par mail à Gilles.Roussel@univ-mlv.fr avant le 21 mai 2011 à 23h59 heure de Paris.

Le sujet est susceptible d’être modifié. Dans ce cas, les modifications seront clairement marquées par un changement de couleur. Il est donc conseillé de relire cette page régulièrement.

L’objectif de ce projet est d’écrire un interpréteur de commandes de manipulations listes de chaînes de caractères extensible par plugin. Le programme devra fournir une interface en ligne de commande capable de charger dynamiquement les plugins correspondants aux commandes tapées par l’utilisateur et leur passer les arguments.

1  Le mécanisme de plugin

Les plugins sont contenus dans des bibliothèques partagées. Au démarrage, l’application recherchent ces bibliothèques dans un ensemble de répertoires. Ceux-ci sont précisés dans un fichier ~/.aloha.cfg ou par la variable d’environnement ALOHA_PATH sous la forme d’une listes de répertoires séparés par des « : ».

Une bibliothèque de plugin contient une méthode char **getPlugins() qui retourne l’ensemble des noms de plugins de la bibliothèque sous la forme d’un tableau terminé par NULL. Ces noms correspondent à des noms de fonctions (qu’on appellera maintenant plugins) présents dans la bibliothèque. Au démarrage l’application récupère l’ensemble des noms de plugins disponibles dans les bibliothèques et les stockent dans une structure de données adaptée à la recherche d’un plugin en fonction de son nom (par exemple un arbre lexicographique, une table de hachage ou une liste triée). Au démarrage, les fonctions correspondant aux plugins, ne sont pas chargées (par dlsym()). Elles sont chargées au moment de leur première utilisation par une fonction de chargement dynamique.

Chaque plugin prend en argument les arguments de la ligne de commande sous la forme d’un tableau de chaînes de caractères (type argv) et une pile de liste de chaîne de caractères. Il retourne une nouvelle pile, éventuellement modifiée.

2  Les plugins à implanter

Les plugins suivants devront être implantés et être placés dans plusieurs bibliothèques :

3  Évaluation

Le respect des noms de fichiers et de fonctions précisés dans ce sujet sont un aspect important de l’évaluation finale du projet car ceux-ci seront testés de façon automatique.

Le choix et l’utilisation d’une structure de données adaptée à la recherche des plugins seront pris en considération.

Une attention particulière devra être portée à la détection et à la gestion des erreurs qui pourront se produire lors de l’utilisation de votre bibliothèque.

Votre projet sera à rendre sous la forme d’une archive compressée tar.gz contenant : les sources dans un répertoire src, les bibliothèques dans un répertoire lib, les commandes dans un répertoire bin et une documentation de 5 pages maximum sur votre projet au format PDF dans un répertoire doc.


Ce document a été traduit de LATEX par HEVEA