p_fork_wait ok
This commit is contained in:
parent
d54e5da572
commit
858cd39d49
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user