← Retour

Minishell - Implémentation d'un interpréteur de commandes en C

Développement d'un shell en C. Gestion des pipes, redirections, here-docs, variables d'environnement, etc. Implémentation des builtins essentiels et exécution de binaires externes.

  • C
  • Shell
  • System Programming

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

  1. Lexer – tokenize la ligne de commande en tokens.
  2. Parser – construit une structure de commandes simples / pipelines et valide la syntaxe.
  3. Expander – remplace les $VAR, gère les quotes et les règles d’expansion.
  4. Pipes & Redirections – prépare fichiers/FD, pipe(), dup2() pour chaîner STDIN/STDOUT.
  5. 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