Salut à tous !
Bon voilà j'ai un problème sur lequel je me casse la tête depuis quelques jours déjà et la date de remise du TP approche à grand pas !![]()
Voici la consigne de mon exercice :
Écrire deux programmes en C qui communiquent par le tube "tmp" crée précédemment. Le premier programme doit écrire dans le tube des nombres aléatoires entre 30 et 99 (sous forme de texte - 2 caractères). Le deuxième programme doit récupérer les nombres et écrire sur la sortie standard les caractères ASCII correspondants au codes numériques. (Note: vous pouvez utiliser les fonctions sprintf et itoa pour les conversions.)
J'ai donc deux fichiers :
Envoi.c :
Ce fichier permet donc l'envoi de nombres aléatoires sur un tube "tmp" que j'ai déjà créé.
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 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char *argv[]) { int tube[2]; int chifRand=0; int i=0; //char chaine[256]; pipe(tube); int df = open("tmp", O_APPEND|O_RDWR); close (tube[0]); while (i<10) { chifRand = (rand() % (99-30 +1)) + 30; //sprintf(chaine,"%d",chifRand); printf("%i\n",chifRand); write (df, /*chaine*/ &chifRand, 2); i++; } return 0; }
Je le suis tâté à utiliser "sprintf" pour résoudre le problème que je vais énoncer mais j'ai tout remis en com'.
J'ai également reception.c permettant la réception de ces nombres :
Et voici enfin mon problème, lors de l'exécution :
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 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/stat.h> #include <fcntl.h> int main(int argc, char *argv[]) { int tube[2]; int buf; int i=0; pipe(tube); int df = open("tmp", O_APPEND|O_RDWR); close (tube[1]); while (i<10) { read (df, &buf, 2); printf ("%i bien recu \n", buf); i++; } return 0; }
envoi.c :
reception.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 damien@damien-VirtualBox ~/Bureau/TP5-3.0/Exercice4 $ ./Envoi 73 76 67 35 73 75 96 32 59 61
Comme vous le voyez ça correspond pas des masses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 damien@damien-VirtualBox ~/Bureau/TP5-3.0/Exercice4 $ ./Reception -1218969527 bien recu -1218969524 bien recu -1218969533 bien recu -1218969565 bien recu -1218969527 bien recu -1218969525 bien recu -1218969504 bien recu -1218969568 bien recu -1218969541 bien recu -1218969539 bien recu![]()
Je suppose que mon erreur viens du fait que j'envoi l'adresse des entiers et non les entiers eux-mêmes ...
Je suppose également que la solution réside dans itoa() ou sprintf(), mais je ne vois pas du tout comment l'adapter à mon problème !
Merci d'avance de votre aide !!![]()
Partager