Partage
  • Partager sur Facebook
  • Partager sur Twitter

Fonction execlp et boucle for

Sujet résolu
    19 février 2018 à 17:15:17

    Bonjour,

    Je dois faire un programme qui consiste à lancer, pour chaque fichier passé en paramètre, un processus fils qui exécute un grep. Le programme s'arrête uniquement lorsque tous les fils ont terminé.

    Par exemple, si mon programme s'appelle mongrep.c et que je cherche la chaine "toto" dans deux fichier f1 et f2, sur la ligne de commande j'aurais donc: ./mongrep toto f1 f2

    Voici mon code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/types.h> 
    #include <sys/wait.h>
    
    
    
    int main(int argc, char* argv[]){
      if(argc<3){
        printf("il faut passer des arguments");
        return 1;
      }
    
      int nb_fichiers=argc -2;
      int i =0;
      int tab_fork[30];
    
     
      for(i=0;i<nb_fichiers;i++){
         //on fait les fork()
        tab_fork[i]=fork();
       
        if (tab_fork[i]==0){
           //Code des fils
          
          printf("i avant boucle=%d\n",i);
          execlp("grep","grep",argv[1],argv[i+2],NULL);
          perror("problème exec\n");
          exit(0);//au cas où
          }
        
        else{
          //Code du père
          //Le père se termine quand tous ses fils ont terminé
          i=0;
          for(i=0;i<nb_fichiers;i++)
    	wait(NULL);     
        }
      }
      
      return 0;
    }



    Mon problème, c'est que j'ai bien conscience que le code après le exec ne s'exécute pas, et je vois bien en faisant mes tests que la boucle for ne fait qu'une itération, mais je ne vois pas comment résoudre le problème... Si quelqu'un pouvait me donner un coup de main :) j'espère avoir été claire :) 

    Merci à vous :) 

    • Partager sur Facebook
    • Partager sur Twitter
      19 février 2018 à 18:00:44

      Bonjour,

      ligne 36 tu mets i a 0, ligne inutile

      ta boucle d'attente ligne37/38 doit se trouver après la boucle de création des fils l20, pas dedans!

      -
      Edité par breizhbugs 19 février 2018 à 18:01:20

      • Partager sur Facebook
      • Partager sur Twitter
      ** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
        19 février 2018 à 18:18:22

        Merci beaucoup, c'était bien ça! Tu viens de mettre fin à des heures proches de la crise de nerfs ahah! Merci beaucoup :D 

        • Partager sur Facebook
        • Partager sur Twitter

        Fonction execlp et boucle for

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown