Fork et programmation C

Résolu/Fermé
Enness Messages postés 34 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 10 août 2010 - 30 mars 2010 à 19:02
Enness Messages postés 34 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 10 août 2010 - 5 avril 2010 à 14:07
Bonjour,

je viens ici parce que je n'en peut plus !!!!
Voila je ne suis pas du tout habituer au systeme UNIX et j'ai un TP à faire dessus.

En résumé, je dois créer 11 processus qui, à partir d'un nombre (<1000) entré par l'utilisateur doit vérifier si celui ci est premier.
En fait on stocke les nombre premiers (inférieur a 31) dans un tableau de 11 case et chaque processus doit verifier si le nombre entré par l'utilisateur est divisible par le nombre qui lui est associé.

En clair le processus 1 essaye de diviser par 1, le proc. 2 par 3, le proc. par 5....le proc 11 par 31.
Si le nombre n'est pas divisible par le chiffre associé au processus, on affiche rien, sinon on affiche "le nombre n'est pas premier".


Ma question porte surtout sur le fork et comment engendré les 11 processus et pour associer chacun d'eux au nombre du tableau.

Si qqun peu m'aider parce que j'ai TOUT essayer et rien ne marche...

Merci d'avance.

3 réponses

Enness Messages postés 34 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 10 août 2010
3 avril 2010 à 12:36
Up si qqun pouvait m'aider...Comment générer 11 fork provenant du même père...
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
Modifié par chuka le 3/04/2010 à 16:30
salut,
tu peux essayer cela:
#include<stdio.h>  
#include<sys/types.h>  
#include<unistd.h>  
#include <sys/wait.h>   
#define uchar unsigned char  
#define NB_PROCESS 11 
int main()  
{  
 uchar bcl=0;  
 int nb;  
 int pidF[NB_PROCESS];  
 uchar tab[NB_PROCESS]={1,2,3,5,7,11,13,17,19,23,31};  
 printf("Entrer un nb: \n");  
 scanf("%d",&nb);  
for (bcl=0;bcl<NB_PROCESS;bcl++){  
  if ((pidF[bcl]=fork())==0){  
   sleep(1);  
   if (nb%tab[bcl]){  
 printf("Je ne divise pas %d par %d et je suis le process %d\n",nb,tab[bcl],getpid());  
   }  
   else{  
 printf("Je divise %d par %d et je suis le process %d\n",nb,tab[bcl],getpid());  
   }  
   _exit(0);  
 }  
 else{  
  printf("je suis le pere process %d et creation de %d\n",getpid(),pidF[bcl]);  
  //  
}  
}  
waitpid(pidF[0], NULL, 0);   
waitpid(pidF[1], NULL, 0);   
waitpid(pidF[2], NULL, 0);   
waitpid(pidF[3], NULL, 0);   
waitpid(pidF[4], NULL, 0);   
waitpid(pidF[5], NULL, 0);   
waitpid(pidF[6], NULL, 0);   
waitpid(pidF[7], NULL, 0);   
waitpid(pidF[8], NULL, 0);   
waitpid(pidF[9], NULL, 0);   
waitpid(pidF[10], NULL, 0);  
return 0;  
}  

Il faudrait que tu geres les erreurs de creation etc...mais je pense que ca te permettra d'avancer un peu...
Sur un malentendu, ca peut marcher!!
0
Enness Messages postés 34 Date d'inscription lundi 4 mai 2009 Statut Membre Dernière intervention 10 août 2010
5 avril 2010 à 14:07
Je vais tester tout ca, franchement merci beaucoup, parce que là j'etais au bout du rouleau...:))
0