programmation système

programmation système - Programmation

Marsh Posté le 14-03-2002 à 15:39:00    

salut à tous !
ptite kestion : imaginez que vous deviez creer un ensemble de processus (l'appel à fork() permet la création d'un processus) et que vous deviez ensuite relier tout ces processus à l'aide de tubes (appel à pipe() + redirection d'entrée/sortie sur les processus)
jusque là pas de prob...simplement UN prob...comment relier le dernier processus créé avec le premier ?  
je sais pas si j'ai été très clair....
merci d'avance pour d'éventuelles idées

Reply

Marsh Posté le 14-03-2002 à 15:39:00   

Reply

Marsh Posté le 14-03-2002 à 15:41:37    

nawbacan a écrit a écrit :

salut à tous !
ptite kestion : imaginez que vous deviez creer un ensemble de processus (l'appel à fork() permet la création d'un processus) et que vous deviez ensuite relier tout ces processus à l'aide de tubes (appel à pipe() + redirection d'entrée/sortie sur les processus)
jusque là pas de prob...simplement UN prob...comment relier le dernier processus créé avec le premier ?  
je sais pas si j'ai été très clair....
merci d'avance pour d'éventuelles idées  




 
getppid() ca renvoie bien le pid du pere?
sinon utilise des threads c le meme espace d'adressage
regarde l'API POSIX 4.0 comment ca marche :)


---------------
Narf... It is broken...
Reply

Marsh Posté le 14-03-2002 à 16:22:20    

en y réfléchissant un peu plus-...je me dit qu'une tube nommé pour faire kommiker le dernier et le premier Ce serai pas mal..
 
en effet , un tube anonyme :  
c'est création d'un tube, puis un fork. ainsi les deux procesus sont lié.
mais à partir de 2 processu existant...je peut pas créer un tube anonyme entre les 2. alors tube nommés... t'en pense quoi DLR ?
 
pis API posix...fo ke je mate...

Reply

Marsh Posté le 14-03-2002 à 16:24:38    

pour finir fo kand meme ke je dise...que lorsque l'anneau de processus est en place, je fais un recouvrement de code à tout les processus. le code de recouvrement est un jeu auxquele chaque processus "joue" .

Reply

Marsh Posté le 14-03-2002 à 16:52:54    

Tu les fait dans quel ordre les fork ?
Est ce que c'est  : A crée B, qui crée C, qui crée D...
ou bien A crée B, puis C, puis D.
 
Dans le 2ème cas, on peut imaginer que A crée tous les pipes, puis 'indique' à chaque fils lequel utiliser ?
 
exemple :  
A crée les pipes AB et BC, le fils B en lui indiquant d'utiliser les pipes AB et BC.
A crée le pipe CD, le fils C en lui indiquant d'utiliser les pipes BC et CD.
.
.
.
A crée le pipe DA, le fils D en lui indiquant d'utiliser les pipes CD et DA.

Reply

Marsh Posté le 14-03-2002 à 17:10:58    

nawbacan a écrit a écrit :

en y réfléchissant un peu plus-...je me dit qu'une tube nommé pour faire kommiker le dernier et le premier Ce serai pas mal..
 
en effet , un tube anonyme :  
c'est création d'un tube, puis un fork. ainsi les deux procesus sont lié.
mais à partir de 2 processu existant...je peut pas créer un tube anonyme entre les 2. alors tube nommés... t'en pense quoi DLR ?
 
pis API posix...fo ke je mate...  




 
je te conseille fortement d'utiliser les threads a l aplace des processus c plus souple a utiliser :D
man pthread_create tu dois avoir tout ce qui faut et meme plus (synchro mutex etc)
man poxi peut etre auss ique ca marche je sais pas


---------------
Narf... It is broken...
Reply

Marsh Posté le 14-03-2002 à 17:15:35    

afin d'avoir un controle sur le nombre de processus générés, j'utilise un fonction récursive.
donc A créée son pipe  
    puis crée B puis  
    B cree son pipe et cree C
   .....  
    .....
     
donc j'ai bien une série de processus communicant par les pipe
MAIS kand j'arrive sur le dernier admetton E, je sais pas comment  spécifier que le pile qui va être crréer soir aussi communiquer avec A....

Reply

Marsh Posté le 14-03-2002 à 17:53:53    

nawbacan a écrit a écrit :

afin d'avoir un controle sur le nombre de processus générés, j'utilise un fonction récursive.
donc A créée son pipe  
    puis crée B puis  
    B cree son pipe et cree C
   .....  
    .....
     
donc j'ai bien une série de processus communicant par les pipe
MAIS kand j'arrive sur le dernier admetton E, je sais pas comment  spécifier que le pile qui va être crréer soir aussi communiquer avec A....  




 
tu fais une fonction donner_parent et donne_pipe
tu chaines tout
et quand donner_parent c null tu fais donner pipe et tu boucle le tout
ca peut ptete marche sauf si c trop objet pour le C :D


---------------
Narf... It is broken...
Reply

Marsh Posté le 14-03-2002 à 18:28:16    

Au début, tu crées le pipe qui fera le rebouclage. Puis quand chaque parent forke, il le donne au fils et le vire chez lui. Comme ça, il arrive intact dans le dernier.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 17-03-2002 à 22:57:41    

bon je me suis remis un peu sur le problème, j'ai eu du job entre deux.  
ok je vois sur le principe que le parent passe le pipe à son fils et qu'il le vire de chez lui.  
MAIS si je suis dans le code du parent ok le fils aura son pipe lors du fork, MAIS ensuitesi je vire le pipe du parent , le fils le perd en meme temps. ou alors j'ai rien compris.
 
pour les thread , cé possible que ce soit plus facile..mais je pense que j'ai pas le temps de les apprendre.

Reply

Marsh Posté le 17-03-2002 à 22:57:41   

Reply

Marsh Posté le 18-03-2002 à 00:37:35    

nawbacan a écrit a écrit :

 
MAIS si je suis dans le code du parent ok le fils aura son pipe lors du fork, MAIS ensuitesi je vire le pipe du parent , le fils le perd en meme temps. ou alors j'ai rien compris.




le fils est un nouveau process qui ne sait rien de ce que fait son pere.
Il a connaissance du passé jusqu'au fork puisque le pere et le fils etaient le meme process. Apres le fork il ignore ce que fait son pere. (sauf si tu as mis en place des processus
de communication via des pipes ou signaux)
 
A+
LEGREG

Reply

Marsh Posté le 18-03-2002 à 01:32:30    

nawbacan a écrit a écrit :

 
MAIS si je suis dans le code du parent ok le fils aura son pipe lors du fork, MAIS ensuitesi je vire le pipe du parent , le fils le perd en meme temps. ou alors j'ai rien compris.



D'après ce que je crois me souvenir...
Lorsque tu fork, tu te retrouves avec un pipe ouvert à la fois dans le père et le fils. Si tu le fermes (l'entrée ou la sortie)dans le père, il reste ouvert dans le fils.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed