Fraicheur des données dans un tube

obasileus Messages postés 18 Date d'inscription mardi 17 juillet 2001 Statut Membre Dernière intervention 31 août 2006 - 22 janv. 2005 à 17:49
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005 - 23 janv. 2005 à 20:55
Salut,



j'ai deux processus qui tournent, je veux qu'a intervalle de temps
régulier l'enfant ecrive dans le tube juste avant que le pere recupere
les données dans le pipe. Comment faire ?

@+



oba.

5 réponses

dletozeun Messages postés 546 Date d'inscription vendredi 13 février 2004 Statut Membre Dernière intervention 9 janvier 2008 1
22 janv. 2005 à 22:20
de quoi tu parles?!!

ya de ces topics en ce moment...
0
obasileus Messages postés 18 Date d'inscription mardi 17 juillet 2001 Statut Membre Dernière intervention 31 août 2006
22 janv. 2005 à 23:16
je parles de fork() de pipe de tube de thread posix de processus... et moi non plus je sais plus trop de quoi je parle....

@+



oba.
0
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
23 janv. 2005 à 07:05
Tu as ouvert un pipe entre pere et fils et tu desire que le pere lise ce que le fils ecrit dans le pipe.

- dans le pere

1 - cree ton pipe avec pipe( int fd[2]); la fonction te rend 2 file descripteurs

2 - ferme fd[1] ( voir explication plus bas)

3 - fork ton fils.

4 - fais un read
(fd[0]) sur le pipe. le read est en mode bloquant par defaut.

- dans le fils

- fais un write sur fd[0].

le pere va attendre une arrivee sur fd[0] et se synchronisera sur le fils.

Dans les pipes la communication est simple duplex et c'est pourquoi il faut deux file descriptors.

Dans ton cas tu n'a besoin que d'un sens de communication et c'est pourquoi tu fermes le deuxieme file desc.

si le fils ecrit dans le pipe alors que le pere vient de le fermer le fils se prend un sigpipe qui le tue.

pour en savoir plus sur les pipes : man pipe, ou info pipe.


Yves
0
obasileus Messages postés 18 Date d'inscription mardi 17 juillet 2001 Statut Membre Dernière intervention 31 août 2006
23 janv. 2005 à 09:11
c'est bon ca marche dans le sens fils pere mais maintenant le pere à
recupéré les données du fils dans le tube, il les as modifié etje veux
les renvoyer au fils. Je ne sais pas ou faire le read pour le fils
sachant que le fils execute 4 thread à l'infini et que je veux qu'il ne
recupere les info qu'un' fois toute les n seconde

@+



oba.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Nashua Messages postés 48 Date d'inscription lundi 29 novembre 2004 Statut Membre Dernière intervention 16 mars 2005
23 janv. 2005 à 20:55
Quelle thread doit recevoir les infos du pere???.

Si tu as plusieurs threads tu devrais ouvir un pipe (on dit aussi fifo) par thread dans le pere.

Autrement si tu lis ce que j'ai ecris dans mon dernier message, tu
comprendras que le deuxieme file desc peut etre utilise dans l'autre
sens.

Le probleme est que tous les read() sont bloquants. On verra plus tard
comment faire un select sur le pipe entrant ( connecte au read);

Yves
0
Rejoignez-nous