Programme C

cs_hbenji Messages postés 5 Date d'inscription lundi 2 mai 2011 Statut Membre Dernière intervention 8 mai 2011 - 7 mai 2011 à 03:19
axelorque Messages postés 10 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 juillet 2011 - 9 mai 2011 à 13:17
Bonjour pouvez vous m'aider en m'expliquant les lignes de code de ce programme et si on peut faire plus simple tout en ayant le même résultat merci pour votre aide.



#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include
#include <sys/types.h>
#include <string.h>
#include <wait.h>

void fctfils(int temps_max){
srand(time(NULL)*getpid());
int temps = rand() % temps_max;
printf ("\tF: fils %d je dors %d sec\n",getpid(),temps);
sleep(temps);
printf ("\tF: fils %d fin\n",getpid());
exit (temps);
}


int main (int argc, char * argv[]){

int temps_max;
int nombre_fils;

if (argc==3 && atoi(argv[1])>0 && atoi(argv[1])<10 && atoi(argv[2])>0)
{
nombre_fils = atoi(argv[1]);
temps_max=atoi(argv[2]);
}
else {
fprintf(stderr,"Erreur: usage %s NOMBRE_DE_FILS<10 NOMBRE_DE_SECONDE_MAX \n",argv[0]);
exit(1);
}

int i;
int pid;
for (i=0;i<nombre_fils;++i){
pid = fork();
if (pid < 0) exit(1);
if (pid == 0) fctfils(temps_max);
}

int option=0;
int status;
int retour;

for (i=0;i<nombre_fils;++i){
pid = waitpid(-1,&status,option);
if (WIFEXITED(status)!=0) retour=WEXITSTATUS(status);
printf("P: fils %d se termine apres %d sec\n",pid,retour);
}

printf("P termine\n");

exit(0);

}

1 réponse

axelorque Messages postés 10 Date d'inscription jeudi 27 mai 2010 Statut Membre Dernière intervention 4 juillet 2011
9 mai 2011 à 13:17
le processus père va lancer "nombre_fils".
ceux-ci vont dormir un certain temps sans dépasser "temps_max" avant de s’arrêter
le père lui attend que tous ses processus fils se termine avant de se terminer lui aussi

je ne suis pas sous Linux donc je ne pourrais ps plus t'aider
0
Rejoignez-nous