Processus

Fermé
haikei00X Messages postés 67 Date d'inscription dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 - 6 juil. 2015 à 10:52
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 - 11 juil. 2015 à 14:44
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 lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
7 juil. 2015 à 22:24
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
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 lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25 > haikei00X
Modifié par chris79 le 8/07/2015 à 19:20
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 dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3 > chris79 Messages postés 97 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016
10 juil. 2015 à 13:49
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 dimanche 20 juillet 2014 Statut Membre Dernière intervention 11 janvier 2016 3
10 juil. 2015 à 15:57
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 lundi 3 octobre 2005 Statut Membre Dernière intervention 1 février 2016 25
11 juil. 2015 à 14:43
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