TD /TP – Initiation à la Programmation système : Tubes
Exercice 1
Que fait le programme ci-dessous. Que pouvez-vous dire de la capacité des tubes
anonymes sur votre système.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
main () {
char c='a';
int p[2];
int i;
pipe(p);
printf("Ecriture dans le tube ");
i=0;
while(write(p[1],&c,1)==1){
i=i+1;
printf("PIPE_BUF=%d Le nombre d'octets écrits est %d \n",PIPE_BUF,i);
}
}
Exercice 2
Compléter le programme ci-dessous afin que le père et le fils communiquent par
l'intermédiaire d'un tube anonyme. Le père envoie au fils N nombres entiers. Le fils calcule
la somme et l'envoie au père qui l'affiche à l'écran.
#include <stdio.h>
#include <stdlib.h>
# define N 10 // on suppose que N < la limite maximale
# define NN N*sizeof(int)
main () {
int *c, *s;
int somme=0,som;
/* on peut utiliser la même variable */
int p1[2],p2[2];
int i, nb_lus, nb_ecrits;
c=(int *)malloc(N*sizeof(int));
s=(int *)malloc(N*sizeof(int));
pipe(p1); /* création du premier tube */
pipe(p2); /* création du deuxieme tube */
if (fork()!=0) { /* le père */
}
else { // le fils
}
sleep(5);
}
Exercice 3
Le but est de faire communiquer deux processus entre eux en utilisant les tubes anonymes.
Écrire un programme dans lequel :
- Le processus père crée un processus fils et lui envoie un message.
- Le processus fils lit le message et ensuite répond au processus père.
- Le processus père attend la réponse de son fils avant de se terminer.
Exercice 4
Le but est de faire communiquer le processus père avec ces deux processus fils.
Écrire un programme dans lequel :
le processus père crée deux processus fils « pid1 » et « pid2 » et ensuite écrit dans
un tube les 26 lettres de l’alphabet (chaque lettre minuscule est suivie de la même
lettre majuscule : aAbBcC….).
les processus fils lisent les lettres une à une ensuite les affichent.