Aller au contenu principal
U/
Système
c

Shell minimal pwd, cd, ls, exit

Écrire un mini-shell C interactif qui lit des commandes sur stdin et implémente pwd, cd, ls et exit en utilisant uniquement les appels POSIX getcwd, chdir, opendir, readdir et closedir.

90 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Le programme affiche le prompt minish> sur stdout, lit une commande via fgets, supprime le \n final, puis l'interprète. Les quatre commandes supportées sont : pwd (affiche le répertoire courant via getcwd), cd <chemin> (change de répertoire via chdir, affiche une erreur sur stderr si chdir échoue), ls (liste les entrées du répertoire courant via opendir/readdir/closedir, une par ligne, sans les entrées . et ..), et exit (quitte proprement avec le code 0). Une commande inconnue affiche "Commande inconnue : <cmd>" sur stderr. La boucle se termine aussi sur EOF (retour de fgets égal à NULL).

Contraintes

  • Compilé avec gcc -Wall -Wextra -std=c99 -o minish minish.c.
  • En-têtes nécessaires : <stdio.h>, <stdlib.h>, <string.h>, <unistd.h>, <dirent.h>, <errno.h>.
  • Pas de system(), popen() ni d'exécution de processus fils : tout est implémenté directement.
  • getcwd appelé avec un tampon de 1024 octets.
  • L'ordre de listage de ls suit l'ordre retourné par readdir (non trié).

Exemple

Session interactive :

minish> pwd
/home/user
minish> cd /tmp
minish> pwd
/tmp
minish> ls
systemd-private-abc
snap-private-tmp
minish> cd /inexistant
cd: /inexistant: No such file or directory
minish> exit

Fin par EOF (Ctrl+D) :

minish> 

Le programme quitte silencieusement avec le code 0.

Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.