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 */
/* de duplication de processus de LINUX. */
/* 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. */
/* La valeur de N est transmise en premier argument */
/* de la commande. */
@ -10,11 +10,53 @@
/*******************************************************/
#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 */
/* un code de retour pris dans argv[1]. */
/* 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 */
/* */
/*******************************************************/
#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[]) {
/**********************/
/* PARTIE A COMPLETER */
/**********************/
int main(int argc, char *argv[])
{
}
/**********************/
/* 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;
}