1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
   | int tube[2];  //Les consignes m'obligent à déclarer en global...
int tube2[2];
 
void fctfils1(void)
{
	int nombre[2];
	printf("Insérez le premier nombre:");
	scanf("%d",&nombre[0]);
	printf("Insérez le deuxième nombre:");
	scanf("%d",&nombre[1]);
	close(tube[0]); 	                               
	write(tube[1],nombre,sizeof(nombre));          
	exit(0);
}
 
void fctfils2(void)
{
	int receptionNb[2];                  
	close(tube[1]);                         			 
	read(tube[0],receptionNb,sizeof(receptionNb));
	printf("le fils recoit: %d et %d\n", receptionNb[0], receptionNb[1]);
	int multi = receptionNb[0] * receptionNb[1];
 
	close(tube2[0]);
	write(tube2[1],multi,sizeof(multi));
	exit(0);
}
 
 
void fctpere(void)
{
	int multi;                  
	close(tube2[1]);                         	
	read(tube2[0],multi,sizeof(multi));
	printf("le père recoit: %d\n", multi); 				
	wait(0);
	wait(0);
	exit(0);
}
 
int main (int argc, char * argv[])
{
 
    if (((pipe(tube))<0) | ((pipe(tube2))<0)) exit(1);	
 
    pid_t pid = 1;
 
	if ((pid = fork()) < 0) exit(1);					
	if (pid == 0) fctfils1();				
 
	else{
		if ((pid = fork()) < 0) exit(1);				
		if (pid == 0) fctfils2();
		else fctpere();		
		}
 
} | 
Partager