Contexte & objectif
Projet réalisé en binôme : implémenter un shell Unix-like en C, sans bibliothèques externes (seule dépendance : readline). But : comprendre en profondeur le parsing, la gestion des processus et la communication inter-processus.
Fonctionnalités
- Pipelines (
cmd1 | cmd2 | …) - Redirections :
>,>>,<, here-doc<< - Variables d’environnement & expansion
- Quoting : simple
'et double" - Historique (via
readline) - Built-ins :
echo,cd,pwd,export,unset,env,exit - Exécution de binaires externes
Architecture modulaire
- Lexer – tokenize la ligne de commande en tokens.
- Parser – construit une structure de commandes simples / pipelines et valide la syntaxe.
- Expander – remplace les $VAR, gère les quotes et les règles d’expansion.
- Pipes & Redirections – prépare fichiers/FD,
pipe(),dup2()pour chaîner STDIN/STDOUT. - Executor – exécute les built-ins in-process ou fork/execve pour les binaires,
waitpid()pour la synchro.
Points techniques clés
- Appels système :
fork(),execve(),waitpid(),pipe(),dup2(),open()/close() - Gestion des FDs et nettoyage pour éviter fuites/bloquages
- Gestion d’erreurs & codes de retour cohérents avec les usages Unix