p_fork_wait ok

This commit is contained in:
JunkJumper 2020-09-24 11:15:16 +02:00
parent d54e5da572
commit 858cd39d49
2 changed files with 97 additions and 12 deletions

View File

@ -2,7 +2,7 @@
/* p_fork_wait : Ce programme illustre le mecanisme */ /* p_fork_wait : Ce programme illustre le mecanisme */
/* de duplication de processus de LINUX. */ /* de duplication de processus de LINUX. */
/* Le processus fils affiche N slashs,pendant */ /* Le processus fils affiche N slashs,pendant */
/* que le père attend la fin du fils pour afficher */ /* que le p<EFBFBD>re attend la fin du fils pour afficher */
/* un message de fin. */ /* un message de fin. */
/* La valeur de N est transmise en premier argument */ /* La valeur de N est transmise en premier argument */
/* de la commande. */ /* de la commande. */
@ -10,11 +10,53 @@
/*******************************************************/ /*******************************************************/
#include <stdio.h> #include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main (int argc, char* argv[]) { int main(int argc, char *argv[])
{
/**********************/ /**********************/
/* PARTIE A COMPLETER */ /* PARTIE A COMPLETER */
/**********************/ /**********************/
int res = fork();
int max = atoi(argv[1]);
if (res < 0)
{
printf("ERREUR FORK\n");
}
else
{
if (res == 0)
{ /************************** FILS ***********************/
printf("Je suis le fils :\n");
printf("pid : %d\n", getpid());
printf("ppid : %d\n", getppid());
for (int i = 0; i < max; i++)
{
printf("/");
}
printf("\n\n");
}
else
{ /************************** PERE ***********************/
wait(NULL);
printf("Je suis le père :\n");
printf("pid : %d\n", getpid());
printf("ppid : %d\n", getppid());
for (int i = 0; i < max; i++)
{
printf("*");
}
printf("\n\n");
}
}
return 0;
} }

View File

@ -7,20 +7,63 @@
/* Le processus fils affiche un message puis retourne */ /* Le processus fils affiche un message puis retourne */
/* un code de retour pris dans argv[1]. */ /* un code de retour pris dans argv[1]. */
/* Le pere affiche "Operation reussie" si le fils */ /* Le pere affiche "Operation reussie" si le fils */
/* s'est bien terminé, et "Echec d'operation" sinon. */ /* s'est bien termin<EFBFBD>, et "Echec d'operation" sinon. */
/* */ /* */
/* Convention : "bien terminé" == (code de retour == 0)*/ /* Convention : "bien termin<EFBFBD>" == (code de retour == 0)*/
/* */ /* */
/* Technique : Utiliser wait (adresse) et WEXITSTATUS */ /* Technique : Utiliser wait (adresse) et WEXITSTATUS */
/* */ /* */
/*******************************************************/ /*******************************************************/
#include <stdio.h> #include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main (int argc, char* argv[]) {
/**********************/ int main(int argc, char *argv[])
/* PARTIE A COMPLETER */ {
/**********************/
/**********************/
/* PARTIE A COMPLETER */
/**********************/
int res = fork();
int max = atoi(argv[1]);
if (res < 0)
{
printf("ERREUR FORK\n");
}
else
{
if (res == 0)
{ /************************** FILS ***********************/
printf("Je suis le fils :\n");
printf("pid : %d\n", getpid());
printf("ppid : %d\n", getppid());
for (int i = 0; i < max; i++)
{
printf("/");
}
printf("\n\n");
}
else
{ /************************** PERE ***********************/
wait(NULL);
printf("Je suis le père :\n");
printf("pid : %d\n", getpid());
printf("ppid : %d\n", getppid());
for (int i = 0; i < max; i++)
{
printf("*");
}
printf("\n\n");
}
}
return 0;
} }