gacki
Messages postés109Date d'inscriptionmardi 23 avril 2013StatutMembreDernière intervention15 mars 2016
-
Modifié par mamiemando le 23/05/2013 à 10:17
Bonjour,
Premièrement je suis vraiment désolé je ne sais pas ou il faut posé cette question est ce qu'il faut la poser dans le forum linux ou langage C.
J'ai un problème avec ce programme, je ne sais pas pourquoi il provoque une boucle infinie.
C'est un programme qui crée deux fils :
- l'un va calculer la somme des deux premières cases,
- l'autre les trois dernières cases.
Puis le père rassemble tous les résultats et affiche la somme totale.
Le code est :
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <signal.h>
#define N 5
main()
{
int p1[2];
int p2[2];
pipe(p1);
pipe(p2);
printf("le travail commence \n");
pid_t fils;
if(fork() != 0)
{
fils = fork();
if(fils != 0)
{
printf("entre les éléments du tableaux : \n");
int i;
int t[N];
for(i=0;i<5;i++)
{
scanf("%d",&t[i]);
}
for(i=0;i<2;i++)
{
write(p1[1],t[i],sizeof(int));
}
write(p1[1],fils,sizeof(pid_t));
int somme1=0;
int somme2=0;
read(p2[0],&somme1,sizeof(int));
wait(0);
for(i=2;i<5;i++)
{
write(p1[1],t[i],sizeof(int));
}
read(p2[0],&somme2,sizeof(int));
wait(0);
printf("la somme est = %d\n",somme1 + somme2);
}
else
{
pause();
int t2[3];
int i;
pid_t vict;
for(i=0;i<3;i++)
{
read(p1[0],&t2[i],sizeof(int));
}
read(p1[0],&vict,sizeof(pid_t));
int somme=0;
somme = t2[0] + t2[1] + t2[2];
write(p2[1],somme,sizeof(int));
exit(0);
}
}
else
{
int t1[2];
int j;
pid_t vict;
for(j=0;j<2;j++)
{
read(p1[0],&t1[j],sizeof(int));
}
read(p1[0],&vict,sizeof(pid_t));
int somme=0;
somme = t1[0] + t1[1];
write(p2[1],somme,sizeof(int));
kill(vict,SIGINT);
exit(0);
}
}