Un petit exo en systeme d'exploitation

Fermé
legend1 Messages postés 23 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 9 mai 2008 - 9 mai 2008 à 22:50
legend1 Messages postés 23 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 9 mai 2008 - 9 mai 2008 à 23:43
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.

4 réponses

Profil bloqué
9 mai 2008 à 22:54
Tu est en quoi? Etude de quoi?
0
beuz29_ Messages postés 170 Date d'inscription jeudi 18 janvier 2007 Statut Membre Dernière intervention 16 mai 2008 7
9 mai 2008 à 23:03
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
treajui Messages postés 6 Date d'inscription vendredi 9 mai 2008 Statut Membre Dernière intervention 18 mai 2008 1
9 mai 2008 à 23:36
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
legend1 Messages postés 23 Date d'inscription dimanche 11 novembre 2007 Statut Membre Dernière intervention 9 mai 2008 2
9 mai 2008 à 23:43
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