C, linux et les pipes - C - Programmation
Marsh Posté le 30-05-2011 à 16:23:44
effa a écrit :
|
Bon, j'avoue que je n'ai pas tout lu, mais déjà tes appels à "fork" sont foireux... C'est après chaque appel à cette fonction qu'il faut tester le code retour, sinon ton processus père va effectivement créer 5 fils, mais actuellement chaque fils qu'il crée engendre à son tour autant de processus que de fils restant à créer. Autant dire que ton processus père prend un sacré coup de vieux puisqu'il devient rapidement arrière-arrière-arrière grand père !
Ensuite, dans tes "switch", il ne faut surtout pas appeler "fork" à nouveau, parce que tu vas recréer un nouveau processus (comme s'il n'y en avait pas déjà assez...).
Marsh Posté le 30-05-2011 à 16:35:01
merci, j'ai changé ca et d'autres choses :
Code :
|
Marsh Posté le 30-05-2011 à 16:45:00
Sauf erreur de ma part, la deuxième équipe est créée une fois que la fonction "pere1" est terminée, ce qui n'est sûrement pas ce que tu souhaites ?
Si tu regardes de près les "pères" des deux équipes doivent faire exactement la même chose, c'est à dire créer 5 fils puis appeler la fonction pereX(). Donc je te suggère de mettre ce code dans une fonction ("foo", par exemple).
Ensuite, dans ton main, tu appelles deux fois fork() pour créer tes deux pères. Après chaque appel, tu invoques ta fonction "foo" si tu es dans le processus fils.
Ainsi, ton programme crée les deux pères, et devient libre de faire autre chose, comme compter les points par exemple !
Marsh Posté le 01-06-2011 à 13:03:06
Bonjour,
J'ai amélioré les choses (j'espere) grace à vous.
j'aimerais suivre tes conseils shaoyin, mais je ne vois pas comment faire dans la mesure, ou d'apres moi il me faut deux pipes, et que ces deux pipes doivent etre declarees en dehors du main pour une question de portée, non ?
du coup, je suis obligée de faire deux fonctions : pere1 et pere2 et fils1 et fils2
non ????
Soyez indulgents, je debute, je stresse et j'ai mon exam qui arrive
Code :
|
Marsh Posté le 30-05-2011 à 12:46:51
Bonjour, j'ai un TP à realiser pour lequel je m'arrache les cheveux....
L'objectif est creer 2 equipes composées d'un processus pere et de 5 sous processus. Chque sous processus doit ecrire dans un fichier son PID en binaire, et son PPID. les fichiers sont numérotés de 0000 a 9999. Le processus pere envoit aux sous processus le numero de fichier a conquérir. Le processus pere est soumis à une tempo de 20s.
En outre, si un processus de l'autre equipe ouvre un fichier deja conquis par l'autre equipe, il recupere le pid de l'adversaire et le tue via SIG_QUIT.
Enfin, un programme qui compte les points par equipe devra etre mis à disposition....
Voila mon debut de code (j'ai honte de le dire, mais j'y ai déjà passé une semaine entière....)
Je crois que seul le premier n° de fichier est recupéré par le sous processus ?
D'autre part, je n'ai pas la moindre idee de comment installer le programme qui compte les points par équipe...
HELP svp, mon exam arrive et je n'ai pas encore pu commencer les revisions tant que je n'ai pas fini ca....et ce n'est pas faute de ne pas bosser !