Vous êtes sur la page 1sur 1

Projet DVD-MIAGE 2010

TP n°5: Communication et synchronisation (les tubes)

Objectif : Communication par tubes

Travail à effectuer :
Rappelons que la fonction read sur l’extrémité d’un pipe est bloquante jusqu’à ce que l’autre
extrémité soit fermée à l’aide d’un close. Soit le programme suivant :

1 #include <stdio.h>
2 #include <unistd.h>
3 #include <ctype.h>
4 int main (void)
5 {
6 char c;
7 int fd[2];
8 pipe(fd);
9 if (!fork())
10 {
11 while (read(0, &c, 1)>0)
12 write(fd[1], &c, 1);
13 fprintf(stderr, "ecrivain fin\n");
14 }
15 else
16 {
17 close(fd[1]);
18 while (read(fd[0], &c, 1)>0)
19 {
20 c = toupper(c);
21 sleep(1);
22 write(1, &c, 1);
23 }
24 fprintf(stderr, "lecteur fin\n");
25 }
26 return 0;
27 }

1) Lisez et comprenez le code. Lancez le programme et testez-le en tapant une chaîne de


caractères suivie de <Return> puis de <Control-d> (marque de fin de fichier sous UNIX :
l'utilisateur ferme le flux de lecture de l'interpréteur). Que se passe-t-il lorsqu’on enlève la
ligne close(fd[1]) ? Pourquoi ?

2) Faites en sorte que le père soit l’écrivain.

3) Remplacez le code du lecteur (lignes 18 à 24) par un appel à execl. Vous écrirez pour
cela un petit programme indépendant qui jouera le rôle de ce lecteur.

Remarque : même après un appel à exec, les numéros des descripteurs de fichiers font
toujours référence aux mêmes fichiers.

Systèmes d'exploitation A. Queudet