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 : 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;
	}
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 : 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;
}
Et voici enfin mon problème, lors de l'exécution :
envoi.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
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 $ ./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

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 !!