Il s'agit d'implémenter un mini shell avec contrôle de processus.
Ce projet devra être réalisé en langage C en utilisant les fonctions POSIX étudiées en cours. Il devra impérativement fonctionner sur les machines de l'UFR. Le travail pourra être effectué par groupe de quatre étudiants au plus. Un rapport devra être rédigé et rendu avant la soutenance. Les dates de remise des rapports et soutenances seront précisées ultérieurement.
Comme tout shell qui se respecte celui-ci possède différentes commandes internes dont (au moins) les suivantes (commande représente n'importe quelle commande Unix avec ses arguments) :
Ce shell devra en outre permettre un contrôle des commandes par l'intermédiaire des commandes internes suivantes :
Outre les variables standard, certaines variables de l'environnement sont prédéfinies de la façon suivante :
Un exemple de session pourrait être le suivant :
Il est 13h30. '/ens/yunes' > cd /tmp Il est 13h30. '/tmp' > ls -ail ...(résultat de ls -ail)... Il est 13h31. '/tmp' > status 0 Il est 13h31. '/tmp' > show ... (exportée)PROMPT:Il est %H:%M. '%P' > (exportée)MAXTIME:0 (exportée)MAXJOBS:0 (locale )x:fsdjkfsdfsdmlfkd (exportée)HOME:/ens/yunes ... Il est 13h32. '/tmp' > vi truc ...(frappe de ^Z) Commande 'vi truc' suspendue numéro de commande attribué : 0 Il est 13h33. '/tmp' > jobs 0: vi truc Il est 13h33. '/tmp' > fg 0 ...(reprise de vi puis sortie) Il est 13h37. '/tmp' > pipe ( ls -ail , more ) ...(résultat de ls -ail pipé dans more) Il est 13h38. '/tmp' > pipe ( redirect ( /etc/motd , , , cat ) , more ) ...(résultat de "cat </etc/motd | more")
Le strict minimum est d'implanter les commandes cd, status, run, jobs, killj, fg et bg. Ensuite, essayez pipe et redirect. Et finissez par la gestion des variables.
La grammaire de commande du shell n'est pas à considérer comme stricte, toutefois je vous conseille de ne pas trop vous en écarter. Ceux qui désirent écrire un parseur en utilisant lex/yacc ou flex/bison doivent savoir que c'est plutot délicat. Concentrez-vous sur l'essentiel.