cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 novembre 2007
-
9 déc. 2006 à 21:04
insafunix
Messages postés1Date d'inscriptionsamedi 14 novembre 2009StatutMembreDernière intervention14 novembre 2009
-
14 nov. 2009 à 11:49
Bonjour,
j'ai fais un programme en c sous unix qui consiste a creer 3 fils (avec fork) , j'ai declaré 2 variables globales leur valeurs doivent etre les memes pour tous les processus creer :
int index[3] , initialisé a -1;
int nb=0;
a chaque creation d'un processus fils j'incremente la variable nb é je modifie le tableau index , apres la creation du 3 fils normalement j'aurai : nb=3 et index(1,2,3); le probleme é ke pour le 1er fils le contenu de nb reste 1 é index(1,0,0) , pour le 2eme fils nb=2 et index(1,2,0) pour le 3eme nb=3 et index(1,2,3) .
comment faire pour que les 3 fils doivent avoir le meme contenu des variables globals (nb=3 et index(1,2,3) ) ?
voici la portion du code :
void main ()
{
for(i=1;i<3;i++) {
fork();
nb++;
index[i-1]=i;
}
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 novembre 2007 9 déc. 2006 à 22:40
le resultat est : lorsque je cree seulement le derniers fils (3eme) , é j'affiche le nb é le tableau pour le 1er et le 2eme fils je trouve ke pour le 1er : il affiche nb = 1, {1,-1,-1} et le 2eme : nb=2 , {1,2,-1}, je ve ke le 1er, 2eme et 3eme fils affiche la meme chose cad :
nb=3 et {1,2,3}cad afficher ce ke le dernier fils a modifier.
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_facilus
Messages postés33Date d'inscriptionlundi 19 juin 2006StatutMembreDernière intervention15 novembre 2007 9 déc. 2006 à 23:56
je fé ca pour : a chaque fois qu'un client se connecte vers le serveur je fé un fork , je sauvegarde l'identifiant du client dan le tableau index (variable global) ensuite lorske le serveur diffuse un message a tt les cliens connécté il teste combiel y'a t'il de clients conécté (la variable globale nb) é parcoure le tableau index pour envoyer a chake client qui existe dan le tableau.
lorsque le 1er client se connecte : nb 1> faire un fork pour traiter le client seul
lorsque le 2eme client se connecte nb = 2;==>faire fork ....lorsque le 3eme client se connecte nb 3;>faire fork .....
lorsque par exemple le 2eme client envoi un message il trouve ke le nb = 2 pas a 3 ???
j'espere ke jé bien expliké ,sinon je detaillerai plus
ShareVB
Messages postés2676Date d'inscriptionvendredi 28 juin 2002StatutMembreDernière intervention13 janvier 201626 13 déc. 2006 à 23:08
salut,
moi je dirais que tu peux faire ça avec uniquement des signaux :
-> SIG_USR1 : handler incrémente nb
-> SIG_USR2 : handler décrémente nb
-> SIG_CHILD (dans le père) : envoit SIG_USR2 à tout le groupe de processus : kill(0,SIG_USR2)
ensuite lorsque le parent se lance, appelles setpgrp() pour créer un groupe de processus
lorsque tu fais ton fork, dans le fils ou dans le père mais pas dans les deux, appelles kill(0,SIG_USR1)
insafunix
Messages postés1Date d'inscriptionsamedi 14 novembre 2009StatutMembreDernière intervention14 novembre 2009 14 nov. 2009 à 11:49
bonjour,j'essaye de créer un programme C qui crée deux fils l'un affiche les entiers de 1à100 et l'autre de 101 à 200 en utilisant FORK mais je n'arrive pas.