2014:03:25:Pipes
Introduction
Notre objectif est de prendre la main sur les tubes de communication.
Utilisation Simple
Ce premier exercice à pour seul but d'établir un tube entre 2 processus issue d'un même fork(2).
Le schema est le suivant:
- Créer le tube avec pipe(2)
- Effectuer un fork(2)
- Dans le père: Mettre en place une boucle qui lit le contenu envoyé sur le tube et l'affiche sur la sortie standard.
- Dans le fils: Mettre en place une boucle qui lit le contenu arrivant de l'entrée standard et l'envoie sur tube.
Les lectures (père et fils) terminent lorsque le père lit 0 octet sur le tube et/ou lorsque le fils lit 0 octet sur l'entrée standard (fin de fichier.)
Écrire le programme correspondant.
- Il peut être judicieux d'écrire une fonction cat(int infd, int outfd) qui effectue une boucle de lecture sur infd et réécris le contenu lu sur outfd.
Simulation du pipe du shell
Notre objectif est simuler une commande shell de la forme:
> cmd1 arg11 arg12 ... arg1n | cmd2 arg21 arg22 ... arg2m
Pour cela nous allons mettre en place allons écrire le programme mypipe dont la ligne de commande devra ressembler à ça:
> ./mypipe cmd1 arg11 arg12 ... arg1n _PIPE_ cmd2 arg21 arg22 ... arg2m
Vos objectifs sont:
- Rechercher dans la ligne de commande le paramètre _PIPE_
Une fois ce paramètre identifié (vous avez le numéro de la case correspondant dans le tableau argv de main) vous pouvez séparer la première de la seconde commande.
- Construire les tableaux à destination de execvp pour les deux commandes.
Vous pouvez construire vos deux tableaux sans aucune allocation juste avec une affectation bien placée.
- Créer le tube
- Démarrer les processus fils (2 fork(2))
- Effectuer les redirections et fermeture nécessaire.
- Lancer les commandes.
- Attendre la fin dans le père.
Bon travail.