Rechercher : dans
Par :

[Programmer un Mini Shell en C]

Dernière réponse le 4 avr 2007 à 18:10:06 Lasto, le 23 mar 2007 à 16:39:00 
 Signaler ce message aux modérateurs

Salut à tous, je suis étudiant en 2e année d'Info, et je dois programmer un Mini Shell en C.

Projet Mini Shell
Généralités
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

Le shell
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) :

cd [ répertoire ]
commande permettant de changer de répertoire courant

status
commande permettant d'obtenir le code de retour de la dernière commande exécutée. Celle-ci fonctionnant toujours normalement.

set variable [ valeur ]
commande permettant de créer/modifier une variable non exportée de l'environnement.

unset variable
commande permettant de supprimer une variable d'environnement.

setenv variable
commande permettant de rendre héritable une variable d'environnement.

unsetenv variable
commande permettant de supprimer l'attribut héritage d'une variable d'environnement.

show
commande permettant de lister les variables d'environnement.

run ( commande )
commande permettant de lancer une commande en mode détaché (arrière-plan).

redirect (fichier-entrée, fichier-sortie , fichier-erreur ,commande)
commande permettant de lancer une commande dont les entrées/sorties sont redirigées. Si un fichier est absent alors il n'y a pas de redirection correspondante.

pipe ( commande , commande )
commande permettant de lancer deux commandes communiquant par un tube anonyme.
Ce shell devra en outre permettre un contrôle des commandes par l'intermédiaire des commandes internes suivantes :

jobs
commande permettant de lister les commandes sous le contrôle.

killj signal numéro-de-commande
commande permettant d'envoyer un signal donné à la commande sous le contrôle.

fg numéro-de-commande
commande permettant de reprendre une commande en mode interactif.

bg numéro-de-commande
commande permettant de reprendre une commande suspendue en mode détaché.
Outre les variables standard, certaines variables de l'environnement sont prédéfinies de la façon suivante :

PROMPT
qui permet de contrôler la chaîne d'invite. On pourra y placer les caractères magiques suivants :
%H
pour représenter l'heure courante.
%M
pour représenter les minutes courantes.
%S
pour représenter les secondes courantes.
%P
pour afficher le répertoire courant.

MAXJOBS
permettant de modifier le nombre maximal de commandes sous le contrôle du shell (0 pas de limitation).

MAXTIME
permettant de contrôler la durée maximale d'exécution d'une commande (0 pas de limite). La durée est exprimée en secondes.
Un exemple de session pourrait être le suivant :

Il est 13h30. '/ens/yunes' > cd /tmpIl est 13h30. '/tmp' > ls -ail...(résultat de ls -ail)...Il est 13h31. '/tmp' > status0Il 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é : 0Il est 13h33. '/tmp' > jobs0: vi trucIl 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 travail à réaliser
Le strict minimum est d'implanter les commandes cd, status, run, redirect et show. Ensuite, essayez pipe et killj. 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.

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « [Programmer un Mini Shell en C] » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
Ressources programmation système Linux VoirVoici quelques liens qui vous permettront de vous aider à vous débrouiller avec la programmation système sous Linux. Tutoriels Page de M. Billaud (fr) Un cours/tutoriel sur la programmation système et réseau sous Unix. Très complet. Cours de...
Enterprise Resource Planning (ERP) - Progiciel de Gestion Intégr VoirIntroduction aux ERP Les ERP (en anglais Enterprise Resource Planning), aussi appelés Progiciels de Gestion Intégrés (PGI), sont des applications dont le but est de coordonner l'ensemble des activités d'une entreprise (activités dites verticales...
Programmation réseau - Les sockets VoirIntroduction aux sockets La notion de sockets a été introduite dans les distributions de Berkeley (un fameux système de type UNIX, dont beaucoup de distributions actuelles utilisent des morceaux de code), c'est la raison pour laquelle on parle...

1

mamiemando, le 23 mar 2007 à 17:12:15

Oui et donc ? Il faut faire le projet à ta place ?

Répondre à mamiemando

2

Lasto, le 23 mar 2007 à 17:23:19

Non, il ne s'agit pas de faire le projet à ma place, le truc c'est que je veux découper en petit morceaux de code, mais je ne sais vraiment pas par quoi commencer, ni comment ce genre de truc fonctionne, alors si on pouvait me donner un coup de pouce pour me guider Ce serait sympa.

Répondre à Lasto

3

mamiemando, le 25 mar 2007 à 21:38:25

Il faut simplement découper de manière logique. Genre une fonction par fonction du minishell, une fonction qui parse une commande saisie au clavier etc...

Bonne chance

Répondre à mamiemando

4

Neoghost, le 2 avr 2007 à 04:01:03

Et bien on dirait qu'un étudiant de ma section cherche les réponses sur le net...
Bosses au lieu de tricher :p

Répondre à Neoghost

6

 Noe Serres, le 4 avr 2007 à 18:10:06
  • +2

Ah ah ah!
trop fort! en flagrant délit!!!

Répondre à Noe Serres

5

mamiemando, le 2 avr 2007 à 09:05:56

Ca j'aime :-)

Répondre à mamiemando
Collection CommentÇaMarche.net