Dans le cadre d'applications informatiques distribuées, plusieurs processus qui correspondent entre autres à des serveurs sont souvent amenés à communiquer entre eux. La programmation d'une application de ce type vous sera proposée en particulier lors de l'atelier PR-3006 d'approffondissement en informatique du second semestre. Le comportement simplifié d'un serveur consiste à répéter indéfiniment trois étapes :
Dans cet exercice vous allez simuler l'échange de messages entre deux serveurs A et B. Voici une brève description du fonctionnement de ces deux serveurs. Le serveur A lit des messages depuis une source (étape 1), analyse leur contenu (étape 2), et en fonction de cette analyse choisit ou non de les transmettre au serveur B via un "canal de transmission" (étape 3). Symétriquement, le serveur B écoute les messages envoyés par le serveur A sur le "canal de transmission" (étape 1), analyse leur contenu (étape 2), et en fonction de cette analyse choisit ou non de les transmettre à une certaine destination (étape 3).
A - Dessinez sur papier le schéma qui correspond à la description donnée ci-dessus. Pour cela, vous pouvez utiliser le code graphique donné ci-dessous et supposer que la source du serveur A et la destination du serveur B sont des fichiers texte.
B -L'objectif de cette question est de mettre en oeuvre ce que vous avez dessiné sur papier. Pour réaliser les lectures et écritures vous devez utiliser la bibliothèque permettant de lire et écrire des lignes dans un fichier implémentée lors du TD-machine 1 de l'unité de systèmes d'exploitation. Lors de ce TD vous avez ainsi du obtenir deux fichiers sources qui ressemblent fortement à ceux-ci : gestionFichiers.c et gestionFichiers.h .
1) Quelles méthodes voyez vous pour implémenter le "Canal de transmission" entre les serveurs A et B ? Dans quel cas utilisez vous une méthode plutôt qu'une autre ?
2) Écrivez un programme qui se dédouble et pour lequel le père exécute le code correspondant au serveur A et le fils celui du serveur B. Laquelle des méthodes proposées à la question I-B-1 est la plus adaptée ? Pour simplifier, les étapes de traitement (numérotées 2) sont supposées vides et les serveurs choisissent toujours de transmettre les messages. Le serveur A effectue la lecture de tous ses messages à partir du fichier texte Source.txt. Le serveur B écrit tous ses messages dans un fichier texte que vous nommez Destination.txt.
L'objectif de cet exercice est d'implémenter un programme qui simule l'ouverture d'un coffre fort protégé par le code secret "1234". Au lancement du programme, l'utilisateur est invité à taper au clavier un code secret. Si l'utilisateur met plus de 10 secondes à entrer un code alors le programme affiche "Trop tard : coffre-fort fermé". S'il tape un mauvais code alors le programme affiche "Code faux : coffre-fort fermé". Sinon, le programme affiche "Bravo : coffre-fort ouvert".
Pour réaliser cette simulation, vous utiliserez deux processus. Le premier est chargé de lire et vérifier le code tapé sur l'entrée standard. Le second comptera 10 secondes et signalera au premier processus qu'il est trop tard. Pour compter 10 secondes, vous pouvez utiliser la fonction sleep.
Aide (rappel des TD 1 et 2). Que se passe -t-il lorsque l'on passe la valeur 0 comme paramètre à la fonction de lecture du TD-machine 1 ? Tirez profit de ce comportement afin de pouvoir lire ce qui est tapé au clavier en utilisant votre bibliothèque gestionFichiers.
Ce sujet a été élaboré par Jean COUSTY et
Laurent NAJMAN
Laboratoire d'Informatique Gaspard-Monge, Université Paris-Est - Département
Informatique, ESIEE Paris