Files
BUT2/TP_SCR3.1/TP_Tubes/ex1.c

73 lines
2.2 KiB
C
Raw Normal View History

2025-10-23 14:28:03 +02:00
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
int p[2]; // tube : p[0] lecture, p[1] écriture
pid_t pf1, pf1f1, pf2;
pipe(p);
// --- créer Pf1 ---
pf1 = fork();
if (pf1 == 0) {
// --- créer Pf1f1 ---
pf1f1 = fork();
if (pf1f1 == 0) {
// Pf1f1 : lecteur
close(p[1]); // ne garde que la lecture
while (1) {
pid_t v;
read(p[0], &v, sizeof(v));
int valeur = read(p[0], &v, sizeof(v));
printf(" %d received %d\n", (int)getpid(), (int)v);
fflush(stdout);
sleep(1);
}
}
close(p[0]);
close(p[1]);
while (1){
pause();
}
}
// --- créer Pf2 ---
pf2 = fork();
if (pf2 == 0) {
//Pf2 : écrivain
close(p[0]); // ne garde que lécriture
pid_t cmoi = getpid();
while (1) {
printf("%d sent %d\n", (int)cmoi, (int)cmoi);
fflush(stdout);
write(p[1], &cmoi, sizeof(cmoi));
sleep(3);
}
}
//P COMME PAPA
close(p[0]);
close(p[1]);
while (1){
pause();
}
printf(valeur);
}
// Question 3 : (Envoyez le signal SIGSTOP à Pf2, puis le signal SIGCONT à Pf2)
// Pour le premiere comportement quand je stop le processus pf2 avec un kill -STOP 211912 alors mon programme est comme en pause c'est normal car l'action du prcessus de pf1f1 dependait du tube qui relie donc comme il a rien a recevoir il attend.
// Puis quand j'utilise SIGCONT le programme se debloque car le pf2 n'est plus gélé donc le pf1f1 peut lire les informations qu'on lui donne.
//(Envoyez le signal SIGSTOP à Pf1f1, puis le signal SIGCONT à Pf1f1.)
//Lors du moment ou j'ai envoyer ce signal le processus pf2 continue d'envoyé ses information au processus pf1f1 sauf que lui comme il est gelé ne reagit pas à sa "requete".
// Puis ainsi il rattrape tous ces requetes qui n'a pas pu repondre et du coup comme il est plus rapide que pf2 a la relance il a recup tous les pid possible comme dans le tube il etait rempli de ça donc il a lu les pid qui était la dans le tube.