Processus

haikei00X Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   -  
sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour.
Je viens de commencer le travail sur une application de chat avec les sockets en c, et je bloque sur un truc. En effet, je voudrais savoir comment est ce qu'un processus parent ayant plusieurs processus fils pourrait il communiquer avec l'un de ses fils connaissant son pid.

Merci d'avance ^_^.

1 réponse

chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   25
 
Salut,

Tu peux te renseigner sur les tubes de communication.
Ils sont créés par l'appel système pipe() et sont fait pour ça :)

++
0
haikei00X
 
Merci chris79 de m'avoir répondu. Je sais que les pipes (non nommés) permettent la communication entre un processus père et son fils. Mais ma situation est un peu plus compliquée que ça. En fait, mon processus parent a plusieurs processus fils et il doit communiquer à chaque fois avec l'un d'eux connaissant son pid. C'est-à dire, on lui fournit le pid, et il doit identifier le fils ayant ce pid puis une fois il le trouve il lui communique des informations.
Mon soucis, c'est où est ce que l'ensemble des fils sont ils stockés. Autrement, où est-ce que le père doit aller chercher pour trouver le bon processus afin de lui communiquer les infos.

Merci d'avance ^_^.
0
chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   25 > haikei00X
 
Si je comprends bien la question, il faudrait donc que tu stockes qq part le lien entre le pipe et le pid d'un fils : tu peux utiliser une structure pour ça qui contient l'id du pipe et le pid du fils.

Je vois bien un truc de ce style là :

- Création du pipe par le père
- Création du fils via fork()
- Création du lien : le père récupère le pid du fils et fait le lien avec le pipe précédemment créé en éditant une structure.

Ensuite reste plus qu'à parcourir ta structure pour trouver le pid et donc le pipe associé.
0
haikei00X Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   3 > chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention  
 
Merci chris79 de m'avoir répondu.
Je vois ce que vous voulez dire, sauf que le problème c'est que les processus fils existent déjà, et à un certain moment, le père est mené à communiquer avec l'un d'eux en recevant le pid du processus fils avec lequel il est censé communiquer. Et donc c'est là où il utilise le pipe pour la première fois, donc on ne saura faire le lien entre le processus fils et le pipe.
0
haikei00X Messages postés 67 Date d'inscription   Statut Membre Dernière intervention   3
 
Est-ce que utiliser des signaux ne résoudra -t-il pas ce problème?
Je n'ai pas encore testé cela c'est juste une idée mais je ne sais pas si elle est bonne ou pas.
Le processus père envoie un signal au processus fils connaissant son pid, et puis on définit un handler qu'on va associer à un signal SIGUSR1 par exemple et voilà!!
0
chris79 Messages postés 97 Date d'inscription   Statut Membre Dernière intervention   25
 
Les signaux ne sont pas fait pour échanger des datas entre processus. Après on doit pouvoir imaginer les utiliser pour informer de datas disponibles en lecture sur le pipe...mais faut vraiment en justifier l'utilité ...

Pour qu'un père puisse communiquer via un pipe avec un fils, il faut que le pipe soit créé avant le fork afin que les deux processus puisse y accéder.
0