From bac90bf2c8e4a8e5783678fbfebbe9cbdfcd0666 Mon Sep 17 00:00:00 2001 From: anperederi Date: Tue, 10 Oct 2023 21:09:56 +0200 Subject: [PATCH] add systeme's tp --- 2A/systeme/tp/1_tp/ex3 | Bin 33280 -> 33368 bytes 2A/systeme/tp/1_tp/ex4 | Bin 0 -> 33504 bytes 2A/systeme/tp/1_tp/ex4.c | 88 ++++++++++++++++++++++++++------------- 3 files changed, 58 insertions(+), 30 deletions(-) create mode 100755 2A/systeme/tp/1_tp/ex4 diff --git a/2A/systeme/tp/1_tp/ex3 b/2A/systeme/tp/1_tp/ex3 index c173fccab07cea6af10118de6a1dad45a62f28ef..21cf90f3208e98620ca4af0c004318aa17e2e327 100755 GIT binary patch delta 1098 zcma)5OK4L;6rGo}wu#iV5kV-mgA%cnN~0qF@>%#w5L;uZrD(OpW{RoJhxZbH5b|PL zG}K_r;8JuWbkT*_RoxgVv>;XLPTVM^i>bKCGKlaz^AcPX7e3xS=iWQ#-uWv$aoGAD)}xz zEP5n30kfxsL;9_N;wpxF;k+io4O&x$>`}-Hr>k@h-fTud;my?~71?i1-H;ma7s5Vv zgi6^BZ@IWC)}&k&g|bpq#r9j%G*Q`rLh%kG@8mIwd0AM>ZizQ=u>L~Tbj`@agY=se zJeI%!SY=d_x>fj|E99!gHFHqLnV+*)w%-40&TpCsQML@i>W4wwZ8Zh5pK944NXYZF zHu@b7q}?E|DRzNO&j1!^dcqbCS~z6ku!SQQUR82ZBrllhxdEI=YPZR?iP)5W{S2LC zRL{h8I>o5W&?uv+Sd@CA&c71rr*zsgK~gtqoM;D delta 715 zcmZ`%O=uHA6n?u&jkVY$>kmTJEG+@sA{gxtQrU{21UGwjvS)9yJz-6VvRQFR z@UfzJT_Cn4j*Qlkzd}?BK8U#_34NQ*YBQSNza8q z^VjTd_dq$hy?QU+ZXb*=(-Rdj6;BGTI>0azj}_x4?)wblP@3^UPM+J zREt`3kfzoFQ>EDH_pgPxU+AFrDRytk;+-|EQ(4{-46Sqc)3)tT@=G6CQ%FQ?YZzkj zM;p6nx`_>%!fx&e#16l9_>IHw9Bw%L-r)}pZ-M8txyKYv%f~3buqdYsvYyM%W%Bt# zUe>?V*@ikk$fq4cDFf!p{9j}T$8ftAph zp2_91IZEldg~ey{lq%$(WHP**gcM0!MZiO5k?oa2!)B3NuIU%}T-=X!8tTWt!|>86xt_IsfL70oBxuo(E;XfbGH*XC-+ zEK$%p?38l7e3v`zispM|eUNWs7(sS@YYOw-6*`sbc0I?kd#3Hi^_~jz{T@CiyS{~G zPrH=L+XpQ>tt>l}g*RH?2hRod?Fna)9nCSF3j*J-?%4SFjuHK^_6E zTSU|QK|*Zl9Z{+$Tel5=n{OXtb!!jihn65-ch?N)+wa--tsUEpO0BCgz9KpvHYd&-?kll|Hq$>mmj?{@;H1F60C`` z%-3ULFXsF<^ARY$KC;msM)`U@c+cw_{cbCSp3xd$;cpbXT?^{jb;$M1zLgtSqAsgT z2Z?1+lz%b!G(oQjZQ{j^2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C z0!)AjFaajO1egF5U;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e*_ ze-P+QmVQYVCwGn*`owB!U@BS4-z*MH&4?eRvw_L-?8`Wtm@Ky@%f`)Qxg|NYb~6qf zuBrHopf1rlM!$+ac--IQPr@h}lf{8a5kK)zkm9W{#n9R%!Q3AZ6wJMX(TFjI9%__S z*%*Dsn2evG}|Qh$tJw#Y(JX3{RY`R;!qO98P}$x=UEF@UK&5 zV@$`4h2@WGYjk2BW{emWL?EO>OCLIdG4hZ5-(i5|7pJQ6K|1P*%&nC9Q;hvL(P5E? zNg3nC8*dkob&0-X?ftBPv=joiBs@b6QAgwcB-2AO!uGb{*3O=>i(SW&+Gnz z?r9S`-BgdcP9|L0*0H`>bjWnp^5m7%o@2_qElu0AOh@LjuH{*omCYiPb>0wrGghxF z6X{pi$=6Nk<}FwDno>K{rp#GsJZr9xA~Wa8$1)<&_yl&Uc4USDLOT`%=BqGo3!mHu1Az*k;R?>AcK2*>2Ny^R6Vn zoURXR3C;jN2u-bC(;GwQ+S{Q?YG=}ET;K4g!ujJE&hr9g(5449N1$5@!Go3p<;Dr% z0?j2oE7WubpX}hAdrJX#256hk2$O$qsHtwU!?WE5ZF0v1m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?b60Vco%m;e)C0!)AjFaajO1egF5 zU;<2l2`~XBzyz286JP>NfC(@GCcp%k025#WOn?deBLRsB`u2GNLiaY*UlI_U|A!Ne zE|{n_J#NQs0PQtTFfWD+1Y-9>@S*b9Q;?024#+-84)PA#Zh5Xw&3S-00T5sj-8bb?xltG{b5l)l2D zR$ferg)~Ne_>ldF{TQjf{rC;DJMWolznQ{si@AL%%NF+t9Z(C8$LNdbs26e{B#r^y zzd$zK%K%M7-4f{Q?bQ(*NE)6aO@j?w4feK(y(?nB7O^uC+m6@=A~xZmJ*N8|u$zMJ mb)Y*P=spL!%Yp83pmzdDLUjK=9#e$GzWx=n(wP5?t^X6sX#9cz literal 0 HcmV?d00001 diff --git a/2A/systeme/tp/1_tp/ex4.c b/2A/systeme/tp/1_tp/ex4.c index f4d7487..e598dd7 100644 --- a/2A/systeme/tp/1_tp/ex4.c +++ b/2A/systeme/tp/1_tp/ex4.c @@ -2,37 +2,65 @@ #include #include #include -#include +#include #include - +#include int main(int argc, char **argv) { - - pid_t pid; - int time = 2; - status = 0; - - switch(pid=fork()) { - - case -1 : // Oups !!! fork n'a pas marché ! - perror("fork"); exit(errno); - - case 0 : // Code du fils - printf("je suis le fils de %d\n", getppid()); - for(int i = 0; i <= 9; ++i) { - printf("%d \n", i); //\n ==> signale pour dire qu'il faut afficher à l'écran - usleep(500000); - } - system("ps -f"); - exit(2); - - default : // Code du père - pid = wait(&status); - printf("Mon fils m'a renvoyé le code de retour %d\n", WEXITSTATUS(status); - printf("Fin du processus père de pid %d.\n", getpid()); - } - - - - exit(0); + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(1); + } + + int N = atoi(argv[1]); + + if (N <= 0) { + fprintf(stderr, "N doit être un entier positif.\n"); + exit(1); + } + + pid_t pid; + int etat; + struct timespec t; + int fils_id = 1; // Compteur pour l'identité des fils + + for (int i = 1; i <= N; i++) { + switch (pid = fork()) { + case -1: + perror("fork"); + exit(errno); + + case 0: + printf("[fils %d]: je suis le fils de pid %d\n", fils_id, getpid()); + for (int j = 0; j < 10; j++) { + printf("[fils %d]: %d\n", fils_id, j); + t.tv_sec = 0; + t.tv_nsec = i*500000000; + nanosleep(&t, NULL); + } + system("ps -f"); + exit(2); + + default: + fils_id++; // Incrémente le compteur pour le prochain fils + break; + } + } + + for (int i = 0; i < N; i++) { + if ((pid = wait(&etat)) == -1) { + perror("pb avec le wait"); + exit(errno); + } + if (WIFEXITED(etat)) + printf("[pere]: mon fils %d a retourne le code %d\n", pid, WEXITSTATUS(etat)); + else + printf("[pere]: mon fils %d s est mal termine\n", pid); + } + + printf("[pere]: Fin du processus pere de pid %d.\n", getpid()); + + exit(0); } +