Obtenir le pack complet des cours, TDs, examens sur Systèmes d’Exploitation!
Vous souhaitez maîtriser Systèmes d’Exploitation ? Ne cherchez plus, nous avons le pack bien choisi pour vous.
Accédez à une collection complète des supports de cours, des travaux dirigés (TDs) corrigés, TPs avec solution, examens...
Télécharger packProjet 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'exploitationA. Queudet
