Processus père et fils, pas sûr de mon programme

Processus père et fils, pas sûr de mon programme - C - Programmation

Marsh Posté le 10-04-2004 à 16:14:33    

Vous en pensez quoi? il me semble que c'est pas très clair...
 
-crée N processus fils,
-se met en attente de ces N processus fils,
-visualise leur identité (Pid_Fils ) au fur et à mesure de leurs terminaisons.
-visualise son pid et celui de son père,
-se met en attente pendant 2*i secondes,visualise la fin de l'attente,
-met fin à sa propre existence par envois d?un signal d?interruption à lui même.

Code :
  1. #include <signal.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <unistd.h>
  5. static void
  6. usage (command_name)
  7. {
  8.   printf ("usage : %s nombres de fils\n", command_name) ;
  9.   exit (1) ;
  10. }
  11. static void
  12. un_fils (void)
  13. {
  14.   pid_t pid;
  15.   int epid, fpid ;
  16.   epid = getpid () ;
  17.   fpid = getppid ();
  18.   printf("\nIdentite de l'enfant : %d",epid);
  19.   printf("\nIdentite du pere : %d\n",fpid);
  20.   (void) sleep (2) ;
  21. }
  22. int main (int argc, char *argv [])
  23. {
  24.   int N ;
  25.   int i ;
  26.   if (argc != 2) usage (*argv) ;
  27.   N =  strtol (argv[1], NULL, 10) ;
  28.   printf ("Creation de %d fils\n", N) ;
  29.   /* On lance N fils */
  30.   for (i=0 ; i<N ; i++)
  31.     switch (fork ()) {
  32. case -1 :
  33.         perror ("Fork" ) ;
  34.         exit (1) ;
  35.       case 0 : /* le fils */
  36.         un_fils () ;
  37.         /* erreur un fils revient ! */
  38.         exit (1) ;
  39.     }
  40. printf("\nMise en attente pendant 2 secondes des processus fils \n" );
  41.   /* On attend les fils (qui se font tuer...) */
  42.   for (i=0 ; i<N ; i++) {
  43.     int status ;
  44.     pid_t fils ;
  45.     fils = wait (&status) ;
  46.     kill(fils,SIGUSR1);
  47.     printf ("\nLe fils s'envoie un signal pour se tuer", fils) ;
  48.     printf ("\nLe fils %d est termine\n",fils);
  49.   }
  50.   /* FIN */
  51.   printf ("\nTous les fils ont termine\n" ) ;
  52. }

Reply

Marsh Posté le 10-04-2004 à 16:14:33   

Reply

Marsh Posté le 10-04-2004 à 17:20:58    

1) quel est ta question ?
2) remarques :
 - le C89 n'admet pas de type par défaut, donc mets int partout ou ça manque.
 - j'aime bien les (void) sleep (2) ; soint disant pour faire plaisir à lint ... oublie pas d'en mettre partout (notemment aux printf)

Reply

Marsh Posté le 10-04-2004 à 17:29:21    

Bah, la question, c'est surtout si le programme répond aux énoncés (que je trouve +- clair)
 
Et si le code était +- valide
 
merci pour tes conseils, je vais vérifier ca...

Reply

Marsh Posté le 10-04-2004 à 18:54:23    

ça a l'air correct, sauf que t'as oublié le paramètre de tempo pour la fonction un_fils (2i secondes...). Et pis je mettrais le exit(EXIT_SUCCESS) dans cette fonction, pas à la sortie, mais ça c'est une question de goût. Et pis y'a quelques petits oublis pas méchants (le type de command_name pour la fonction usage, les includes de sys/types.h, wait.h)...
 
ouala. A part ça, ça roule, sauf si tu veux éviter de créer -2 processus.

Reply

Marsh Posté le 10-04-2004 à 19:12:42    

honnêtement, je comprend pas le "2i" secondes...
 
c'est pas simplement une attentes de 2 secondres ?
 
merci pour les oublis, j'avais vraiment pas vu le sys/types.h

Reply

Marsh Posté le 10-04-2004 à 20:04:05    

_Faust_ a écrit :

honnêtement, je comprend pas le "2i" secondes...
 
c'est pas simplement une attentes de 2 secondres ?


 
Dans l'intitulé, tu dis "se met en attente pendant 2*i secondes". Donc ton i vient de la boucle for, non ? Le premier fils attend 0s, le second 2s, le troisième 4s etc...
 
Si c'est ça, alors tu passes le temps à attendre en paramètre de un_fils, genre
 

Code :
  1. static void un_fils (int tempo)
  2. {
  3.   ...
  4.   sleep(tempo);
  5.   ...
  6. }


 
c'est un détail...

Reply

Marsh Posté le 10-04-2004 à 20:36:28    

pas fou ca... effectivement ca bien du sens se 2*i...
 
par contre j'arrive pas trop à arranger ca pour passer le nombre de paramètre à tempo...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed