Précédent   Forum du club des développeurs et IT Pro > Général Développement > Programmation système > Linux
Linux Forum d'entraide sur la programmation Linux : shell, système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/10/2012, 21h34   #1
Burton's91
Nouveau Membre du Club
 
Inscription : avril 2012
Messages : 52
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 52
Points : 27
Points : 27
Par défaut [Langage C] Processus Père et Fils (Communication par tube)

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 :
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.
Burton's91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h28.


 
 
 
 
Partenaires

Hébergement Web