From c9b7a5a5659df056e9029002edeb8389f8f7c3a3 Mon Sep 17 00:00:00 2001 From: Scott Bren Date: Wed, 20 Feb 2019 15:35:58 -0500 Subject: [PATCH 1/8] working on exercise 1 --- ex1/ex1 | Bin 0 -> 16528 bytes ex1/ex1.c | 10 +++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100755 ex1/ex1 diff --git a/ex1/ex1 b/ex1/ex1 new file mode 100755 index 0000000000000000000000000000000000000000..6138364f6c1399eb42a6ade92e7953f897c77ef6 GIT binary patch literal 16528 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 Date: Wed, 20 Feb 2019 16:11:23 -0500 Subject: [PATCH 2/8] working on exercise 2 --- ex1/ex1 | Bin 16528 -> 16552 bytes ex1/ex1.c | 7 ++++++- ex2/ex2 | Bin 0 -> 16616 bytes ex2/ex2.c | 15 ++++++++++++++- ex2/text.txt | 1 + 5 files changed, 21 insertions(+), 2 deletions(-) create mode 100755 ex2/ex2 diff --git a/ex1/ex1 b/ex1/ex1 index 6138364f6c1399eb42a6ade92e7953f897c77ef6..5b7c5e015e43faff18e18f044b3475486be76321 100755 GIT binary patch delta 664 zcmbQx$he}Bae@Y8#zf8gT((RMU|`EMS%^`OGk_7o4VWy*C_Fiaag88{0z?E(PnKl5 zE#l9z#3y9ZDks~2sjJgYUn?ls`%Q2&2XhuL$1b1=9=*K5ldA--)U)o@V_+}>8qm$U z9mwiD=Fw|AkB@<22guA92mby4|Kc=|=yd(lT>FQiMEN*t4^WvLSVJ33LoQrHKTvHq zYc5P81TIkqlmMG~@^G3SzkCbGcm{rXCKrau{eq%mC$t$DLOptQL3FT>=2MU6HykgR zH}4W;l$d_JpPZzi$JjA>qJp~Rg!ljda{$%AfDDik1H`#NvuZ$sj(h@b zOwPP)OyxZ6K!q+qA&~fu$sZNmSw8?(F>YoQ%I2B8LDz!GL}>FX-F?hJdh#kmJw}en z2MtA;g%~_Ge>7ar$mlb9p>a7-P}0Pm$v|jwl1Z47DbOTA1_=fc2Ot9oSRfPw574zj zO#BQ$gASQ2W4tgq(=?s2X7fc;d3MH&lRw(%bD0Q1lmb;~+3HC`QwIZs0@MU3%|7{~ zrM%=updiTqFja^&veMR^(*vs3WAjVf>5P-C1SU_gPhgao{L$W=F<`Q$gFR=e1yC~( K{F}VdQXT+-WU-L| delta 523 zcmZ3{$T$IrG#CRWYToDi%g6u*e;FqWG3s%8K)D{1JsI~4vM4|#;q+ulrrRQ~xymf% zLZ{4I(sO%;?evAx3%0LYzL|qLiu`t2}v_Uw-m=K~XUd9R`L_k6v969qgm|)T8+g z#|!7pzXaL%CU0PMn54jB#VE~eZ2>f$4Txnv{Qutqq7ar$mlY8p>a7-P}0Pm>4V_pB$F^M9$;t*G4V41HQX{;26RB9X*#3F=9i}O z?2Hp9bK2^2eGvpXf&rw$$ySe1XmX*g_{1#&oGcJw2A0VSZN)hev2)PYoYO%8BI&T1 n(QZ290r)iG1<| #include +int x; + int main(void) { - int x = 50; + x = 50; printf("%d", x); int child = fork(); if(child) { + x = 30; printf("%d", x); } + printf("%d", x); + return 0; } diff --git a/ex2/ex2 b/ex2/ex2 new file mode 100755 index 0000000000000000000000000000000000000000..8af7217be7f7645386092c905c09b40be2a11e3d GIT binary patch literal 16616 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 Date: Wed, 20 Feb 2019 16:38:54 -0500 Subject: [PATCH 3/8] working on exercise 4 --- ex3/ex3 | Bin 0 -> 16568 bytes ex3/ex3.c | 10 +++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100755 ex3/ex3 diff --git a/ex3/ex3 b/ex3/ex3 new file mode 100755 index 0000000000000000000000000000000000000000..9d90962179af2ab32fd9e3aa8616bc2417c74a89 GIT binary patch literal 16568 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 O!;O~33=9R`{{I2O6+7Gj literal 0 HcmV?d00001 diff --git a/ex3/ex3.c b/ex3/ex3.c index 3a3698c1f..0237aa25b 100644 --- a/ex3/ex3.c +++ b/ex3/ex3.c @@ -9,7 +9,15 @@ int main(void) { - // Your code here + + int child = fork(); + + if(child) { + printf("Hello"); + } else { + wait(NULL); + printf("Goodbye"); + } return 0; } From 7be3d1dc3185e23ff8da53177f9efbd05b8593e2 Mon Sep 17 00:00:00 2001 From: Scott Bren Date: Wed, 20 Feb 2019 17:23:40 -0500 Subject: [PATCH 4/8] exercise 4 complete --- README.md | 6 +++--- ex4/ex4 | Bin 0 -> 16616 bytes ex4/ex4.c | 10 +++++++++- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100755 ex4/ex4 diff --git a/README.md b/README.md index 4b8dba5fa..caed38ca3 100644 --- a/README.md +++ b/README.md @@ -129,12 +129,12 @@ int main(int argc, char *argv[]) ``` Here, we're doing the same thing as before, forking a new child process from a parent process. Then, inside that child process, we're calling `execvp()` with the arguments it needs to run the word count program. Note that `exec` -does not spin up _another_ child process from the child process in which we called it. It transforms the process -that called it into the new program that was passed to `exec`, in this case, `wc`, the word count process. That's +does not spin up _another_ child process from the child process in which we calledbin/lsit. It transforms the process +that called it into the new program that was passed to `exec`, in this case, `wc`,bin/lsthe word count process. That's why we still had to have the parent process `fork` a new child process. ## `pipe()` -Conceptually, a pipe is a uni-directional channel between two processes that would otherwise be isolated from each other. When a pipe is established between two processes, one process has access to the write end of the pipe, while the other has read access to the other end of the pipe. Thus, if you want two-way communication between two processes, two pipes will have to be created between both processes, one in each direction. +Conceptually, a pipe is a uni-directional channel between two processes that wouldbin/lsotherwise be isolated from each other. When a pipe is established between two processes, one process has access to the write end of the pipe, while the other habin/ls read access to the other end of the pipe. Thus, if you want two-way communication between two processes, two pipes will have to be created between both processes, one in each direction. Some things to keep in mind when working with pipes is that when a process writes to a pipe, the other process receives the data in FIFO order (which makes sense when you think about the pipe analogy in real life). Additionally, if the process with read access tries to read from the pipe before anything has been written to it, the reading process is suspended until there is some data to read. ```c diff --git a/ex4/ex4 b/ex4/ex4 new file mode 100755 index 0000000000000000000000000000000000000000..d231ba747973b40eb550e5ee8d24de9a53759a73 GIT binary patch literal 16616 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 literal 0 HcmV?d00001 diff --git a/ex4/ex4.c b/ex4/ex4.c index 0221ca96e..4d6ca0cd0 100644 --- a/ex4/ex4.c +++ b/ex4/ex4.c @@ -10,7 +10,15 @@ int main(void) { - // Your code here + int child = fork(); + + if(child) { + + execl("/bin/ls", "ls", 0); + execle("/bin/ls", "ls", 0); + execv("/bin/ls", 0); + + } return 0; } From 64ddcc0dd201b3668a82080fedd0e8dc85fe7b3e Mon Sep 17 00:00:00 2001 From: Scott Bren Date: Thu, 21 Feb 2019 15:51:00 -0500 Subject: [PATCH 5/8] exercise 5 complete --- ex5/ex5 | Bin 0 -> 16776 bytes ex5/ex5.c | 25 +++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100755 ex5/ex5 diff --git a/ex5/ex5 b/ex5/ex5 new file mode 100755 index 0000000000000000000000000000000000000000..d16e42f4e92005ed25e088aa8934d120cb48573c GIT binary patch literal 16776 zcmeHOeQXrR6`#Aa!36tk6B8)Vu;n8%X?*w#W0JVs**>#wY#@$J)dpD3zO(PbeOPyU z!KR^gwB~F z&a>;gL{;ueKS0elh147t}JAT>(ZX{IFtcL7Da^FnT=n}i-w>LF6JD^xCEhoBH;VjO5!i~_-1 z>Fc5&L`j}&PeEfS3P0!Q2r57!D%)XKrfRsDO|_Wm8PVR9pk#+E+MO46=Y<{71<@W+ ziYLYdk1N8Tm9~Qn3sKa?a_}QPi1kJVx#jdp17<|Y?rE?Sp%xlnOepL2GS>84cD%Bk}Y|%}8@oO;e*MmGIQ_aif3K-M7DwcLe7bg%;h~}9(-*9 z{E-4U-hTP~ya>1ghqasqK(T_ruZAO^ABoI`gZ(=6`5uFVtlE;~* zrS!nSacv-cTpJ8TqAVE-1OXiw321|ncpw@%83GnfQ8TG)u|OowP9!6Gi0$j@Y;Du( zJ&n0qy=NEGI(xgdU?>?Hilp>VvbVb}nuv#b1N~9-G!#q3g(uBW&8x^e?}Y2`6mtTp zF*_VU9U!OqSrv(t;Y{ffSb9Tb70#r?A^>zB(|tEwX$a1V`;_onftPpVl#05IxgG5S^a+|$>>a27pKhvBTs&X#W;L&ui|1^qg%zw1#X zI~LVTi!L>@pkA8Wt2(Z#*BA9FaPXdRP?DV;80vK z%NxMV)xePE!f?7;d<}TV5wasX|9uelfei${HmFV%ZLj7&{P*gn=l-&o&1U@Xj-Ps$ z>D}r?Spr;4_;0*{ixV~TPUfw-Q=kEYqss(AL(siU@DvC>ZTJItU~>tmzvZ97`llNv z{2!>3-LsN&FNnweGmi07GtM8(UPLu@qVHZ%ZK&eC)QjiJK;_!yK~MQ+TzJCIM85BI zX5RN5>df5r_4zXQeQ?FLdtuSor%u)&eWq&%4z*@W8I(2H?ywH=Uth* z?U~!YY}E~Q{IWyc^I`fEoO{n6@g4RZ@g4PP5Hp4|kp4c-h%jw!--)^vJMz0bm8jaRlY9?uu8Oe)sy*F27ruEb_ane_X7( zYhPZWx|_#W?sI#eb2t0kwLW)st6OPxuLu2BcM1Pr5#!Jdeqi`^u_Itdz>a_&0XqVA z1ndad5wIg*N5GE2vIx+=LfS`2YX_pGWFa;#!lp%DekC?>eogSSUvZ=0X$`bN@U(9c z*F#uH{@G$S!FjQXkMfN0Mkwg0fNC%u1Xjq!mxhv0urK3-#!IQ+-FBHap4yt-Y0lN{F!(QP0e96pa{K*dZQPej`_;|3i`}G&AqiZtMmB9+vhJ!U9j_eIIsSLxx59leiftVh8bVW z^37Wpdnk9GoAu$Y_R5G+cfnJmIxkL7wIv(8-HX_r>=I(s@cHOuZZ>U+r(56)7W^9m zr{}HVg|XdGaY+5a_ONuo;ecP4tZ~330c@9^->8da6b=Vl9?vPj^Yy>bxPHd{tYJEK z*i!QO!QbQ?*VnN<=5+~(5LqXXW{fGURgeWZUOGdbA3OC0XXq3V2QI6@HG&h zbK*UP5eEGa;23$00(tir@3TW3l-%3&6 zx%~d>Dc~nw03R!W{~T~^*E;`S13cfj-UPhTxsK6ung;PU;uvIMBwkPKeU7hV)_j5+ zfMfilM*jtZFPwO*)5<<~-=^1_W{TLTlH7L z^IehJqv}?`^Ifl9fNvosi9TIGpA97Sl%5_O^bD}2G!jjZX#RclZ0cJKM|>o;d>$q%vuKRd`U_dziMb z>p-ioOFPif@r=J$>-DvE`Oz!Sw;4#Kd52jnHB^VEhA+&m;W;^8FD2#hRGd&Spa;O8 zImu^9sgdXVEb-jPn(bp1qfaA+2Rxhed9+|Ep@jqSAm;jX9ssRiB(9}Xp&<6ZULG07 z7x?~EO8DZ5MVbcrLKIv~B+8o|g!xO>Udb6tW*H_rnGxnmjmGpqKTths&@j~^aY$Mk zW}bLL4|#m8oi%!3NN_{(w5LBEfsD3Dka>^`2U20?3693WpF#DcA$dNOOhpoL6QhAF z8HxtbK-7k#I`i;Qc%bSTN&u^eM&OK76_gVE3VK3eF*(CQa6+76YRpo@g6hyhAQl;b zKH&uLK$MvW?vNPFdg&JYzpA)CfkyBT}71EHMriuIFUWA zZw>*5pTyKYeeV*bbs4Defml753Kt z3z(gR3dWS|={uV!ji1`Lj{ikr-zpr^_c+lJfulW+#cF>VFpLTIj~DuG5ft9krh08JDs<6*BqXZ_PnqIO`ot4`4+Q0sJ$-MVt1&D{uaNy;L4b3Q+NX6C<$+VaH_cD-N7oV8 z5jcLbr{7hkb^-_`Y>?cU?1_E?64{=4g=(!qs|8Dh?1*203S!hgedkpRd#gUSC6~{D zK}@LUL}b4;hZq&ImnqF1S@ocBct!*c-!qTFLH(iUC(du`yKFz(WN-r(=hQCgRu-^t O+hb@flA@qi`~LzcN3QGu literal 0 HcmV?d00001 diff --git a/ex5/ex5.c b/ex5/ex5.c index cbf3b8e61..9663e24f3 100644 --- a/ex5/ex5.c +++ b/ex5/ex5.c @@ -17,6 +17,31 @@ char* msg3 = "hello world #3"; int main(void) { // Your code here + char inbuf[MSGSIZE]; + int i; + + int pipeEnds[2]; + int pipe(pipeEnds); + + + int child = fork(); + + if(child) { + + write(pipeEnds[1], msg1, MSGSIZE); + write(pipeEnds[1], msg2, MSGSIZE); + write(pipeEnds[1], msg3, MSGSIZE); + + } else { + + wait(NULL); + for(i = 0; i < 3; i++) { + + read(pipeEnds[0], inbuf, MSGSIZE); + + } + + } return 0; } From 886681442a1316469ef80db3a77e0d52fd6bd98d Mon Sep 17 00:00:00 2001 From: Scott Bren Date: Thu, 21 Feb 2019 17:17:35 -0500 Subject: [PATCH 6/8] exercise 6 complete --- README.md | 8 ++++---- ex6/ex6 | Bin 0 -> 16736 bytes ex6/ex6.c | 21 +++++++++++++++++++++ 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100755 ex6/ex6 diff --git a/README.md b/README.md index caed38ca3..ab56a2426 100644 --- a/README.md +++ b/README.md @@ -91,11 +91,11 @@ int main(int argc, char *argv[]) ``` Here, the `waitpid()` function suspends the parent process until the child process pointed at by `rc` terminates. Thus, we ensure that the parent process only runs after the child process has finished its execution. -## `exec()` -The `exec()` system call is used in order to run a program that is different from the calling program (since `fork` only executes copies of the program that called it). -Let's say we wanted to spin up a child process to execute a word count program. Here's how what a program that does that might look like: +## `exehttps://stackoverflow.com/questions/19099352/get-stdout-content-from-system-call-in-c-without-printing-to-stdout +The `exhttps://stackoverflow.com/questions/19099352/get-stdout-content-from-system-call-in-c-without-printing-to-stdout program that is different from the calling program (since `fork` only executes copies of the program that called https://stackoverflow.com/questions/19099352/get-stdout-content-from-system-call-in-c-without-printing-to-stdout +Let's shttps://stackoverflow.com/questions/19099352/get-stdout-content-from-system-call-in-c-without-printing-to-stdoutexecute a word count program. Here's how what a program that does that might look like: ```c -// p3.c +// p3.chttps://stackoverflow.com/questions/19099352/get-stdout-content-from-system-call-in-c-without-printing-to-stdout #include #include #include diff --git a/ex6/ex6 b/ex6/ex6 new file mode 100755 index 0000000000000000000000000000000000000000..ee434fe540d21709f7e5824774b8049b383a7127 GIT binary patch literal 16736 zcmeHOeQ;D)6~DVn!t%9QC@B##o3y)29ldRp3%z_bMbn0^e3@011d%u?Xr< zh}%Ue@be_5}oGibWHdfvSPpnyQ-n{OP2BqntPTN8Og4opMOHzQ~o7F9#kml>g{^r9Y_q`R3cE zuD*NW`O&M-{B_|w@-kp7(TAGXSD*#)khKsKk>A9rS(F?A)K^5Z3^4q+mLLGd@I`ar z>*v4^1MY)=YsmuOvx0=(Sp*jl-);l^fq{*C@k`Sym*LT~NZp@$=>NN+T4L{c3) z8e+*rq$AW7Lsz}=WP)7jO0}q>9JLd!BK~2)+5uPD0hHHQW>s_nN?Hhe_Uqq-%jpz* zfXBl3Az#<_r3xRV`;2if;qHKvGtT_m+ZB#$1^ef6-h|VmNQx#+xcR=BHsSNx3DD~% zocl)c7~!bP>l^ViCR{}aQ6bKnaK3ky#IEfK*b%TJU`N1?fE@ul0(J!cA0wa*z30}B zmYjqAh4$E(;mn=YhEBOp=0lO&^feIW)*geptRes{bHW&ffLU6^j~Xd5oM8+5hdB`3j!He5FjI=S*@u(?uJ z(I}xPFxqfQ7m_X4jdB?79oUB9F36oPt2lywPZ9+eTcrM`jYukQYU4LuT6S6+pWLoF zPHPi4jpg9rs$V&9=g#-Ye%Ss<-3K5Nnf0C8P~Gpasbw!3i?yS5zXxWr3Z^vK2i574 z3E&<3*^cSdBOvSqn_rZiLu)8gPeP>)ZyE>wbp$4VdNY@M1zWFS^*RP`^2dOI(y_eK z(+C_be*^#+@S{j7-_WvWqhsRDZ*2of6rk(`H2R@YIgx$SaW-3GK>KL}d$_ua>~~6FBlo4~$W^@^J`$t~L8saBpk&TCg*iy%B^fyf*MDAv(3;Dx`bb zDlg)in;g0U(;L6xGFET+Ls^Ar%YN9Fz1En$9Lz2Mqc(KXp=~*rxrA%+f&IY;gZqOA zf;z-l;L4P1wqTXwVC-T?z>a_&0XqVA1ndad5wIg*N5GDN9RWK69~A-o{cLS`p>V8r zZNuMq@wcg!)4ALeK=%P11=c#WjPdVm$5y#)~-QWYZfB8~eUx+oJf%;Ee&gBBA?eR8yR(_^z(ZlW|V*9FXci+24 z{(On{@b!Rr0rcFcM+I#kg#Rx=e^(F-dc2Q28 zR78{$WkP0Rgw8AS*+z{Nc)!SJBv%kVN&{hhn#RN99wR+C6eC}@cD16!y3BY%|!PSwd#Ew&*xfO8XC6x z)^&De5=O>X3+H&Nt2SpOx1mz;ALj{A-#YT=`pw!d_^yG^r5EBZae*(mN#KH$+wLL( zb-_t~US}qC=(kkxdMw1}3%*W;xLfe`EyNcHUPp!aLc!~;5Qo)WBGDlbB8 zhK9p59=^|;B|bY2m<)jZ@^hK}3`+gk@q7;OV&k7{Ue8NE%S0Ov*iwr5c}eQrGV6N1 z3b+HFw$|%)n)LbefV+4{HfFD%_oScM*Y_=$fD^KTtn1$i_%evkD1H9mJh3c;hEKK% zt7j!Xd!6_JFP0~v&4E7vxL2&0wXPPUzH|0{)HR2npTY2!!g}xp)Hrz=9hyV`8S2-% z&c6dV`l+_~`99!2<+`AL8TFkj1V4{i_?q-HbHCHaj`%g;80U5hlKf5+jLu2@m1227 zd0_n$zSvy_czo^v{7&#^En5M{IBNkV;c<%Yl#w zevcjrhl~)V3t2?g^dPGkEmg`7jIS{NM-QiydS56J#@wLRU7!_?CiF}?0`Zuc3I
7#|$7X~NHDO0rql?At4#7XKdk;ZtZ3^!_Mh;$&wyJTJ|k4&d`G6d&mghXg5%(@^&+oxZ>0?9X#)2;EF?|Ry+zTN2^N^2h%se*ey?UaMvB(>@%$ep`+Cyj_iv_}$^KSoTjO^eFpLR~PZs_lC(8Rs z7UNjW1@kD)_CB&>8ZawE+u~k)!(xAs6qxdO*$wkdziYAQ&u6AV4lFs~{@EX{5A*nW zAHkIO#jJ0g{}0JN-;IwniSjrJopt}b3 Date: Thu, 21 Feb 2019 18:10:22 -0500 Subject: [PATCH 7/8] most of the stretch exercise done, still need to implement input parsing. --- stretch/src/bankers.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/stretch/src/bankers.c b/stretch/src/bankers.c index b44aed25c..47e2802ad 100644 --- a/stretch/src/bankers.c +++ b/stretch/src/bankers.c @@ -91,6 +91,10 @@ int get_random_amount(void) // Return a random number between 0 and 999 inclusive using rand() + int randomAmount = rand() % 999; + + return randomAmount; + // ^^^^^^^^^^^^^^^^^^ } @@ -152,8 +156,12 @@ int main(int argc, char **argv) // Open the balance file (feel free to call the helper // functions, above). + int balFile = open_balance_file(BALANCE_FILE); + // Read the current balance + read_balance(balFile, balance); + // Try to withdraw money // // Sample messages to print: @@ -161,8 +169,16 @@ int main(int argc, char **argv) // "Withdrew $%d, new balance $%d\n" // "Only have $%d, can't withdraw $%d\n" + if(amount <= balance) { + balance = balance - amount; + write_balance(balFile, balance); + } else { + printf("Insufficient Funds - Current Available Balance: %d.", balance); + } + // Close the balance file //^^^^^^^^^^^^^^^^^^^^^^^^^^ + close_balance_file(balFile); // Child process exits exit(0); From 62740d3300d5becc17f257f009cbb9a864f866d7 Mon Sep 17 00:00:00 2001 From: Scott Bren Date: Thu, 21 Feb 2019 19:26:44 -0500 Subject: [PATCH 8/8] stretch exercise complete --- stretch/src/balance.txt | 1 + stretch/src/bankers | Bin 0 -> 17464 bytes stretch/src/bankers.c | 21 ++++++++++++++++++--- 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 stretch/src/balance.txt create mode 100755 stretch/src/bankers diff --git a/stretch/src/balance.txt b/stretch/src/balance.txt new file mode 100644 index 000000000..2447c9fb6 --- /dev/null +++ b/stretch/src/balance.txt @@ -0,0 +1 @@ +4458 \ No newline at end of file diff --git a/stretch/src/bankers b/stretch/src/bankers new file mode 100755 index 0000000000000000000000000000000000000000..f12d60d622c51113b71ede26ecc091ae559429c6 GIT binary patch literal 17464 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 RDpGXyVO!${D=O->|8G<0xi