Bonjour les amis,, j'ai besoin de votre avis sur un programme que j'ai realisé qui traite le prb suivant:
Un processus (père) P0 lit dans un fichier un texte de plusieurs dizaines de caractères.Il le segmente en paquets de 8 caractères et numérote chaque paquet.Au fur et à mesure que les paquets sont constitués, le père transmet par tubes le paquet à l’un de ses 3 fils P1, P2, P3 choisi aléatoirement. Chacun de ses fils traite un paquet reçu en le retenant aléatoirement entre 1 et 4 secondes, puis le transmet à P4 par tube.P4 réordonne les paquets reçus et affiche le message lorsque tous les paquets ont été reçus.

le code est le suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <unistd.h>
#include <sys/type.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
 
/******************FONCTION RETARD***************/
void retard(void);
void retard(void)
switch((rand()%4)+1)
{
case 1: sleep(1);
case 2: sleep(2);
case 3: sleep(3);
case 4: sleep(4);
}
 
void Recep_pro(int t1, int t2, int t3, char pk);
void Recep_pro(int t1, int t2, int t3, char pk)
{
   close(t2[0]);
   close(t2[1]);
   close(t3[0]);
   close(t3[1]);
   read(t1[0],pk,10);
}
 
void Recep_p4(char pke, int t4);
void Recep_p4(char pke, int t4)
{
read(t4[0],pke,10);
 
}
 
/****************Corps Principal********************************/
 
int main(int argc, char *argv[])
{
pid_t proc_pid[3];   /* PID des processus*/
int i,n,fi;
int c1, c2, c3, c4;
int tubeE1[2],tubeE2[2],tubeE3[2],tubeE4[2]; /*tube d'emission*/
int tubeR[2]; /*tube de reception*/
char paquetE[9], paquetR[9], paquet[9];
char template[] = "/tmp/fileXXXXXX";
 
 
FILE *fichier
 
pipe(tube1E); /*******************************************/
pipe(tube2E); /*    Creation des tubes d'emission       	*/
pipe(tube3E); /*******************************************/
 
pipe(tube1R); /*******************************************/
pipe(tube2R); /*    Creation des tubes de reception     	*/
pipe(tube3R); /*******************************************/

 
fichier=open("text.txt","r");
 
while(feof(fichier)==0)
{
   fgets(paquet+1,8,fichier);
   i=1;
   strcpy(paquet,i);
   i++;
   r=(rand()%3)+1;
   switch(r)
   {
   case 1:
   write(tube1E[1],paquet,8);
   kill(proc_pid[0], SIGSUR1);
   case 2:
   write(tube2E[1],paquet,8);
   kill(proc_pid[1], SIGSUR1);
   case 3:
   write(tube3E[1],paquet,8);
   kill(proc_pid[2], SIGSUR1);
   }
 
   if(c1=0)
   {
   proc_pid[0]=fork();
   c1=1;
   }
 
   switch(proc_pid[0])
   {
   case -1:
   fprintf(stderr,"Echec de creation de P1");
   return EXIT_FAILURE;
   break;
 
	case 0:
   signal(SIGSUR1, Recep_pro(tube1E,tube2E,tube3E,paquetR));
   retard();
   write(tubeR[1],paquetR,9);
   break;
 
   default:
		if(c2=0)
       {
       proc_pid[1]=fork();
       c2=1;
       }
      switch(proc_pid[1]);
		{
   	case -1:
   	fprintf(stderr,"Echec de creation de P2");
      return EXIT_FAILURE;
 
		case 0:
   	signal(SIGSUR1, Recep_pro(tubeE2,tubeE1,tubeE3,paquetR));
   	r=retard();
 
   	write(tubeR[1],paquetR,9);
 
	   default:
   		if(c3=0)
       	{
       		proc_pid[2]=fork();
       		c3=1;
       	}
      	switch(proc_pid[2]);
			{
   		case -1:
   		fprintf(stderr,"Echec de creation de P3");
         return EXIT_FAILURE;
 
			case 0:
   		signal(SIGSUR1, Recep_pro(tubeE3,tubeE1,tubeE2,paquetR));
   		retard();
         write(tubeR[1],paquetR,9);
 
         default:
         	if(c3=0)
       		{
       		proc_pid[3]=fork();
       		c4=1;
       		}
      		switch(proc_pid[3]);
				{
   			case -1:
   			fprintf(stderr,"Echec de creation de P3");
         	return EXIT_FAILURE;
 
				case 0:
            read(t4[0],packetE,9);
            fi= mkstemp(template);
            n=packetE[0];
            lseek(fi,(n-1), SEEK_SET);
            write(fi,packetE+1,8);
            } /*P4*/
 
           } /*P3*/
      } /*P2*/
   }   /*P1*/
 
}