Un petit exo en systeme d'exploitation

legend1 Messages postés 23 Statut Membre -  
legend1 Messages postés 23 Statut Membre -
Bonjour,
a tous alors on a commencer cette semaine des tp en systeme d'exploitation et on nous a donner des exo a resoudre
donc il y a une exercice que je comprend meme ce qu'il dit
j 'aimerai bien si quelqu'un me l'explique


Exercice 3
Ecrire un programme C qui prend en paramètre une série de fichiers source .c, les compile chacun séparément et simultanément puis édite les liens pour produire un exécutable. Ce programme doit :
• lancer un processus fils pour chacun des noms de fichiers passés en paramètre;
• chaque fils doit exécuter le programme gcc -c sur le fichier dont il s'occupe;
• le père doit attendre la terminaison de tous ses fils;
• si l'ensemble des fils ont terminés sans erreur, le père réalise l'édition de liens en exécutant cc sur les fichiers .o produits par les fils.
Configuration: Windows XP
Internet Explorer 6.0

4 réponses

  1. Profil bloqué
     
    Tu est en quoi? Etude de quoi?
    0
  2. beuz29_ Messages postés 170 Statut Membre 7
     
    t'es en BTS info ou DUT ou quelque chose comme ca ?
    va poser ta question ici, ils pourront ptr te repondre... https://www.developpez.com/
    0
  3. treajui Messages postés 6 Statut Membre 1
     
    C'est à base de fork, execlp ou execvp et waitpid
    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man2/fork.2.html#toc5 ca va t'aider.

    Pour l'algo en gros c'est ca :
    (manque les traitements des noms de fichiers les sources xxx.c, yyy.c, les compilés xxx.o, yyy.o et l'executable zzz sans extention ou zzz.exe)

    1 boucle de lancement basée sur les argv du main
    pid_t   pid;
    pid = fork ();
    if (pid > 0) {
     /* Processus père      */
     /* Tu relève le no du process fils (stockage dans un tableau pids[x]=pid par exemple)*/
    } else if (pid == 0) {
     /* Processus fils      */
     ...
     execlp("gcc","-c",<nomdu source>); */
    } else {
     /* Traitement d'erreur pas pu lancer le process */
    }
    
    1 boucle de waitpid pour relever les résultats
    int status
    int errCount=0;
    waitpid(pid[x],&status,NULL)
    if(WEXITSTATUS(status)!=0){
     /* ca s'est mal passé */
     ...
     errCount++;
    }else{
     /* OK pour celui ci */
    }
    
    1 lancement de link identique à ci-dessus(fork & execvp &waitpid si tout OK (errCount==0)
    
    
    0
  4. legend1 Messages postés 23 Statut Membre 2
     
    svp treajui est ce que vous pouvez m'expliquer ce que fai se programme parcequ'on a meme pas fait le cours et franchement j'ai pas compris le but
    merci d'avance
    0