Fichier PDF

Partage, hébergement, conversion et archivage facile de documents au format PDF

Partager un fichier Mes fichiers Convertir un fichier Boite à outils PDF Recherche PDF Aide Contact



avec sleep pour F2 .pdf



Nom original: avec_sleep_pour_F2.pdf
Auteur: alexandre COURTILLAT

Ce document au format PDF 1.5 a été généré par Microsoft® Word 2013, et a été envoyé sur fichier-pdf.fr le 12/03/2014 à 11:39, depuis l'adresse IP 86.221.x.x. La présente page de téléchargement du fichier a été vue 511 fois.
Taille du document: 35 Ko (4 pages).
Confidentialité: fichier public




Télécharger le fichier (PDF)









Aperçu du document


/******************************************************************************/
/* SB 27 jan 2010
*/
/* Lancement de F1, F2 et F3 avec synchro par SIGUSR1 */
/* AprÞs F1 est producteur et F2 et F3 son consommateur */
/* F1 produit Mang2 ou Mang3 F2 doit consommer le premer et F3 le second
*/
/* utilisation de signaux classiques
/*
/* il y a un bug en cas de double conso de F2 car pas rÚception de deux
*/
/* confirmation (signaux) pour F1 d'ou le rajout d'un sleep pour F2 entre
*/
/* deux conso */
/* il y a une variante avec signal temps reel et pas de sleep */
/******************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include

<stdio.h>
<stdlib.h>
<errno.h>
<sys/types.h>
<unistd.h>
<string.h>
<signal.h>
<time.h>

#define MAX 512
#define taille_msg 6
int fini = 0;
void retour(int sig){
fini++;
printf("sig %d consomme %d fois\n",sig,fini);
}
void fin(int sig){
printf("on me demande de finir ..... FIN\n");
exit(0);
}
void rien(int sig){
//printf("%d\n",sig);
}
int main(int argc, char*argv[]){
int pfd[2],pid1,nlu,pid2,pid3;
char s[MAX];
int cmpt=0, max=2, num;
char *tab[2]= {
"Mang2","Mang2" };
if (pipe(pfd) == -1) {perror("pipe");exit(1);}
if(argc == 2)

max = atoi(argv[1]);

pid1 = fork();
if(pid1 == -1)

{perror("fork 1");exit(1);}

else
/************* fille 1 *************************************/
if(pid1 == 0){
signal(SIGUSR1,rien);
signal(SIGINT,retour);
nlu = read(pfd[0],s,sizeof(int));
printf("1 dit ma soeur2 est : %d\n",pid2=atoi(s));
nlu = read(pfd[0],s,sizeof(int));
printf("1 dit ma soeur3 est : %d\n",pid3=atoi(s));
kill(pid2,SIGUSR1);
pause();
printf("nous sommes : %d %d et %d\n\n je suis le producteur F1\n", getpid(), pid2, pid3);
srand(time(NULL));
while(cmpt < max) {
num = rand() % 2;
if(write(pfd[1],tab[num],6) == -1 ) {perror("write 1");exit(1);}
printf("**********************F1 Ó produit %s**********************\n",tab[num]);
cmpt++;
//pause();
}
while(fini != max){
pause();
}
kill(pid2,SIGUSR2);
kill(pid3,SIGUSR2);
}
else{
pid2 = fork();
if(pid2 == -1)
{perror("fork 2");exit(1);}
else
/************* fille 2 *************************************/
if(pid2 == 0){
signal(SIGUSR1,rien);
signal(SIGUSR2,fin);
srand(time(NULL));
printf("je suis fille 2 avec %d pour Pid\n",getpid());
pause();
nlu = read(pfd[0],s,sizeof(int));
printf("2 dit ma soeur3 est : %d\n",pid3=atoi(s));
kill(pid3,SIGUSR1);
pause();
printf("nous sommes : %d %d et %d\n\n je suis le consommateur F2\n", pid1, getpid(),pid3);
while(1){
num = 1 + (rand() % 2); // 1 ou 2 pour lire une ou deux fois dans le pipe
printf("F2 : Je lis %d fois\n",num);
while(num != 0){
nlu = read(pfd[0],s,6);

printf("F2 : a mange %d char : %s\n",nlu,s);
if(s[4]!='2'){
printf("F2 : c'est pas pour moi, je remets dans le pipe\n");
if(write(pfd[1],s,nlu) == -1 ) {perror("write 1");exit(1);}
}else{
printf("F2 : c'est pour moi Miammmmm\n");
kill(pid1,SIGINT); // je prÚviens F1 que j'ai consommÚ
sleep(1);
}
num--;
}
kill(pid3,SIGUSR1); // je rÚveille F3 pour qu'elle consomme
printf("F2 : je passe la main\n");
pause();
}
printf("je suis fille 2 et c'est fini\n");
}
else{
pid3 = fork();
if(pid3 == -1)
{perror("fork 3");exit(1);}
else
/************* fille 3 *************************************/
if(pid3 == 0){
signal(SIGUSR1,rien);
signal(SIGUSR2,fin);
printf("je suis fille 3 avec %d pour Pid\n",getpid());
pause();
kill(pid1,SIGUSR1);
kill(pid2,SIGUSR1);
printf("nous sommes : %d %d et %d\n\n je suis le consommateur F3\n", pid1, pid2, getpid());
pause(); // attente que F2 est lu et traitÚ
while(1){
nlu = read(pfd[0],s,6);
printf("F3 : a mange %d char : %s\n",nlu,s);
if(s[4]!='3'){
printf("F3 : c'est pas pour moi, je remets dans le pipe\n");
if(write(pfd[1],s,nlu) == -1 ) {perror("write 1");exit(1);}
}else{
printf("F3 : c'est pour moi Miammmmm\n");
kill(pid1,SIGINT); // je prÚviens F1 que j'ai consommÚ
}
kill(pid2,SIGUSR1); // je rÚveille F2 pour qu'elle consomme
printf("F3 : je passe la main\n");
pause();
}
printf("je suis fille 3 et c'est fini\n");
}
/************* mere

*************************************/
else{

sleep(1);
sprintf(s,"%d",pid2);
if(write(pfd[1],s,strlen(s)) == -1 ) {perror("write 1");exit(1);}
sprintf(s,"%d",pid3);
if(write(pfd[1],s,strlen(s)) == -1 ) {perror("write 1");exit(1);}
sprintf(s,"%d",pid3);
if(write(pfd[1],s,strlen(s)) == -1 ) {perror("write 1");exit(1);}
wait(0);
wait(0);
wait(0);
printf(" mes filles sont mortes\n\n je pars\n");
}
}
}
}


avec_sleep_pour_F2.pdf - page 1/4
avec_sleep_pour_F2.pdf - page 2/4
avec_sleep_pour_F2.pdf - page 3/4
avec_sleep_pour_F2.pdf - page 4/4

Documents similaires


avec sleep pour f2
signauxtpsreel
exemple y
solution fiche tp n3
sans sleep pour f2
tp2c


Sur le même sujet..