Bonjour,
On a eu un exercice:
* �crire les programmes addition, multiplication, soustraction. Utiliser scanf pour lire les nombres, printf pour les afficher (en clair: faire simple, rapide, concis)
* �crire le programme dispatch, qui doit commencer par lancer les co-processus, puis attend sur l'entr�e standard un ordre du style "addition 2 4". Avec strcmp, trouver quel est le co-processus � utiliser, lui envoyer l'ordre, puis afficher le r�sultat.
J'ai r�ussi a faire fonctionner le programme mais il y a des zones d'ombres, et j'aimerais savoir pourquoi est-ce que ca marche.
Voila le code de dispatch.
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 int main(int argc, char ** argv) { int pid=0; int add[2]; int sous[2]; int mult[2]; char commande[500]=""; int nb1=0; int nb2=0; pipe(add); pipe(sous); pipe(mult); pid=fork(); if(pid==0) { dup2(add[0],0); close(add[1]); execvp("add",NULL); printf("Si add, a raté \n"); return EXIT_FAILURE; } pid=fork(); if(pid==0) { dup2(sous[0],0); close(sous[1]); execvp("sous",NULL); printf("Si sous, a raté \n"); return EXIT_FAILURE; } pid=fork(); if(pid==0) { dup2(mult[0],0); close(mult[1]); execvp("mult",NULL); return EXIT_FAILURE; } puts(""); while(1){ close (add[0]); close (sous[0]); close (mult[0]); scanf("%s %d %d",commande,&nb1,&nb2); if(strcmp(commande,"add")==0){ dup2(add[1],1); printf("%d\n",nb1); printf("%d\n",nb2); } else if(strcmp(commande,"sous")==0){ dup2(sous[1],1); printf("%d\n",nb1); printf("%d\n",nb2); } else if(strcmp(commande,"mult")==0){ dup2(mult[1],1); printf("%d\n",nb1); printf("%d\n",nb2); } } return 0; }
Et le code de add :
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 #include <stdio.h> #include <unistd.h> int main(void){ int a=0,b=0; while(1){ scanf("%d",&a); scanf("%d",&b); printf("resultat =%d\n",a+b); } return 0; }
Si vous regardez le code du dispatch, juste avant le while(1) j'ai mis un puts(""); et le probl�me, quand je l'enl�ve ce puts, quand je tape add 4 5 par exemple, il ne se passe rien du tout, j'ai l'impression qu'il n'y a aucune communication, et quand le je met, �a marche comme il faut, si quelqu'un pouvait m'expliquer pourquoi (ou si j'ai fait une grossi�re erreur) j'aimerais le savoir.
Merci d'avance pour vos r�ponses.
Edit: Je vous l'accorde c'est un peu sale, aucune v�rification d'erreur :p.
Partager