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