TD 8
TD 8
TD 8
10 pipe ( tube );
12 if ( fork () ) /* père */
13 {
14 close ( STDOUT_FILENO ); dup ( tube [1]);
15 close ( tube [0]); close ( tube [1]);
9 pipe ( tube );
28 exit ( EXIT_FAILURE );
29 }
Exercice 3. Il y a des erreurs dans le traitement des erreurs du programme précédant. Quelle sont-elles ?
Exercice 4. Écrire un programme qui prend comme paramètre une commande shell et l’exécute en remplaçant les
caractères minuscules par des majuscules sur la sortie standard.
Exercice 5. Écrire un programme qui exécute la commande shell ls -l | grep \.c$ | wc -l.
Exercice 7. Les deux programmes suivants sont-ils équivalents ? Donnez une commande shell permettant de débloquer
la version avec un tube nommé.
write ( tube [1] ," bonjour " ,8); write ( tube [1] ," bonjour " ,8);
read ( tube [0] , str ,8); read ( tube [0] , str ,8);
printf ("% s \ n " , str ); printf ("% s \ n " , str );
close ( tube [0]); close ( tube [1]); close ( tube [0]); close ( tube [1]);
exit (0); exit (0);
} }
Serveur de mots
Exercice 8 : serveur de mots. Écrire un programme qui crée deux tubes nommés question et answer ; chaque
fois qu’il reçoit un mot sur le tube question, il mélange ses lettres et les renvoie sur le tube answer. Hypothèse : le
serveur ne s’arrête jamais de travailler.
Exercice 9 : arrêt du serveur. Modifier le programme précédent pour que le serveur s’arrête correctement lorsqu’il
reçoit le signal SIGINT.
Exercice 10 : un client. Écrire un programme qui prend une phrase en argument, envoie tous ses mots au serveur
de mots et affiche les mots rendus par le serveur.
Exercice 11 : plusieurs clients. Que se passe-t’il si l’on exécute plusieurs clients se même temps ?