Bonjour à tous,

j'ai un problème dans mon programme en C.
Je développe sous ubuntu (version 64bits) et avec kate en éditeur de texte.
J'ai un processus père et un processus fils qui communique entre eux via des tuyaux (pipe).

Le problème c'est que dès le départ quand le fils écrit dans le tube à destination du père il n'y a aucune valeur qui est transférer.

Voici le code :

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
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
 
#define lire 0
#define ecrire 1
 
main()
{
    printf("Salut ! \n");
 
    int NBFILS = fork();
 
    int status;
 
    int TUBE2[2],TUBE1[2];
 
    int n;
 
    pipe(TUBE2);
    pipe(TUBE1);
 
    if(NBFILS == -1)
    {
	printf("Création processus impossible");
	exit(0);
    }
 
    if(NBFILS ==0)
    {
	int valF=15;
	printf("F->Fils 1 PID : %d  Père PID : %d \n",getpid(),getppid());
 
	int tempo = valF;
 
 
    //---1 Le fils envoie la valeur 15
	close(TUBE1[lire]);
	write(TUBE1[ecrire],&tempo,sizeof(tempo));
 
	printf("F->Valeur de ValF : %d\n",tempo);
 
    //---4 Le fils lit le contenu du tube
    close(TUBE2[ecrire]);
    read(TUBE2[lire],&tempo,sizeof(tempo));
 
    printf("F -> Nouvelle valeur tempo : %d \n",tempo);
    //----4 FIN---------------------+
 
	exit(1);
    }
 
    else
    {
	int valP;
	printf("Père PID : %d\n",getpid());
 
	//valP=18;
	printf("Avant écriture \n");
	//-------
 
    //---2 Le père lit le contenu du tube
	close(TUBE1[ecrire]);
	read(TUBE1[lire],&valP,sizeof(valP));
	printf("Valeur n %d\n",valP);
	//---2 FIN----------
 
	//----3 Le père
	valP=7;
	close(TUBE2[lire]);
	write(TUBE2[ecrire],&valp,sizeof(valP));
    //-----3 FIN-----------
 
 
	//-----attend la fin du fils
	  wait(&status);
	  printf("PERE : mon fils %d a fini\n",(int) status/256);
	//------
    }
 
 
    return(0);
}
Là je suis un peu perdu. Il ne faut pas utiliser des signaux dans mon cas j'utilise 2 tubes ?
Je vous remercie par avance.