0% ont trouvé ce document utile (0 vote)
32 vues2 pages

Guide du projet PIPEX en C

Le projet pipex vise à reproduire le comportement des pipes et des redirections de shell en C sans utiliser de fonctions interdites. Il nécessite la gestion de fichiers, l'exécution de commandes via execve(), la création de processus, et la gestion des erreurs. Des fonctionnalités bonus incluent la gestion de plusieurs pipes et des heredocs.

Transféré par

Jean Claritôt
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
32 vues2 pages

Guide du projet PIPEX en C

Le projet pipex vise à reproduire le comportement des pipes et des redirections de shell en C sans utiliser de fonctions interdites. Il nécessite la gestion de fichiers, l'exécution de commandes via execve(), la création de processus, et la gestion des erreurs. Des fonctionnalités bonus incluent la gestion de plusieurs pipes et des heredocs.

Transféré par

Jean Claritôt
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

PIPEX

Le projet pipex consiste à reproduire le comportement des pipes (|) et des redirections (<, >) de shell
en C, sans utiliser de fonctions interdites comme system() ou fork().

Contraintes principales
1. Fonctionnement de base
Le programme doit prendre 4 arguments :

sh
./pipex fichier1 cmd1 cmd2 fichier2
Et doit se comporter comme :

sh
< fichier1 cmd1 | cmd2 > fichier2
Exemple :

sh
./pipex [Link] "grep a" "wc -l" [Link]
→ Doit être équivalent à :

sh
< [Link] grep a | wc -l > [Link]
2. Gestion des fichiers et processus
Lecture/écriture :

fichier1 → entrée de cmd1.

fichier2 → sortie de cmd2.

Execution des commandes :

Doit utiliser execve() (pas system()).

Doit gérer les paths (ex: /usr/bin/grep vs grep).

Doit gérer les arguments ("ls -l" → ["ls", "-l", NULL]).

Pipes et processus :

Doit créer 2 processus (fork() deux fois).

Doit rediriger les flux avec dup2().

Doit fermer les file descriptors correctement (close()).

3. Gestion des erreurs


Le programme doit gérer :

Fichiers inaccessibles (open() échoue).

Commandes introuvables (execve() échoue).


Pipes/forks qui échouent.

Doit afficher un message d’erreur clair (perror() autorisé).

4. Bonus (optionnel)
Gérer plusieurs pipes (ex: cmd1 | cmd2 | cmd3).

Gérer les heredoc (<<) comme dans :

sh
./pipex here_doc LIMITER cmd1 cmd2 fichier2
→ Doit lire l’entrée jusqu’à LIMITER avant d’exécuter cmd1.

Gérer les redirections >> (append au lieu d’écraser).

Exemple d’exécution
sh
./pipex [Link] "cat" "grep Hello" [Link]
→ Lit [Link], passe dans cat, filtre avec grep Hello, écrit dans [Link].

Conseils pour commencer


Comprendre les pipes UNIX (pipe(), dup2(), fork()).

Parser les commandes (split "ls -l" en ["ls", "-l"]).

Gérer les paths (vérifier /usr/bin/ si la commande n’est pas trouvée).

Bien fermer les file descriptors pour éviter des leaks.

Vous aimerez peut-être aussi