Envoi sur tube "tmp", write(), read()
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 :
Code:
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;
} |
Ce fichier permet donc l'envoi de nombres aléatoires sur un tube "tmp" que j'ai déjà créé.
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 :
Code:
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;
} |
Et voici enfin mon problème, lors de l'exécution :
envoi.c :
Code:
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 |
reception.c :
Code:
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 |
Comme vous le voyez ça correspond pas des masses :cry:
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 ! :furax:
Merci d'avance de votre aide !! :)