From 165869e857f73ff66f0b03032af5d86b9d1564b5 Mon Sep 17 00:00:00 2001 From: kremlin Date: Fri, 14 Nov 2014 01:26:49 -0500 Subject: [PATCH] lots of stuff --- homework/assgn9/hw9.c | 47 +++++++++++++++ homework/assgn9/hw9.tar.gz | Bin 0 -> 1544 bytes homework/assgn9/main | Bin 0 -> 14539 bytes homework/assgn9/makefile | 12 ++++ homework/assgn9/queue.c | 107 ++++++++++++++++++++++++++++++++++ homework/assgn9/queue.h | 21 +++++++ lab/.sighandler.c.swp | Bin 0 -> 12288 bytes lab/Makefile | 12 ++++ lab/lab4/.Makefile.swp | Bin 0 -> 12288 bytes lab/lab4/Makefile | 12 ++++ lab/lab5/lab5.tar.gz | Bin 0 -> 473 bytes lab/lab6/Makefile | 12 ++++ lab/{lab5 => lab6}/zombie.c | 0 lab/lab7/Makefile | 9 +++ lab/lab7/lab7.tar.gz | Bin 0 -> 1103 bytes lab/lab7/main.c | 66 +++++++++++++++++++++ lab/lab7/matrix.c | 48 +++++++++++++++ lab/lab7/matrix.h | 8 +++ lab/lab8/.Makefile.swp | Bin 0 -> 12288 bytes lab/lab8/.trivial_shell.c.swp | Bin 0 -> 12288 bytes lab/lab8/Makefile | 12 ++++ lab/lab8/lab8.tar.gz | Bin 0 -> 777 bytes lab/lab8/trivial_shell | Bin 0 -> 10023 bytes lab/lab8/trivial_shell.c | 68 +++++++++++++++++++++ 24 files changed, 434 insertions(+) create mode 100644 homework/assgn9/hw9.c create mode 100644 homework/assgn9/hw9.tar.gz create mode 100755 homework/assgn9/main create mode 100644 homework/assgn9/makefile create mode 100644 homework/assgn9/queue.c create mode 100644 homework/assgn9/queue.h create mode 100644 lab/.sighandler.c.swp create mode 100644 lab/Makefile create mode 100644 lab/lab4/.Makefile.swp create mode 100644 lab/lab4/Makefile create mode 100644 lab/lab5/lab5.tar.gz create mode 100644 lab/lab6/Makefile rename lab/{lab5 => lab6}/zombie.c (100%) create mode 100644 lab/lab7/Makefile create mode 100644 lab/lab7/lab7.tar.gz create mode 100644 lab/lab7/main.c create mode 100644 lab/lab7/matrix.c create mode 100644 lab/lab7/matrix.h create mode 100644 lab/lab8/.Makefile.swp create mode 100644 lab/lab8/.trivial_shell.c.swp create mode 100644 lab/lab8/Makefile create mode 100644 lab/lab8/lab8.tar.gz create mode 100755 lab/lab8/trivial_shell create mode 100644 lab/lab8/trivial_shell.c diff --git a/homework/assgn9/hw9.c b/homework/assgn9/hw9.c new file mode 100644 index 0000000..b6b6149 --- /dev/null +++ b/homework/assgn9/hw9.c @@ -0,0 +1,47 @@ +#include "queue.h" +#include +#include + +#include +#include + +#define MAX_NUMS 100000 + +void* producer(void* arg) +{ + queue_t* queue = (queue_t*)arg; + size_t i = 0; + for(i = 0; i < MAX_NUMS; ++i) + { + queue_add(queue, i); + } + return NULL; +} + +void* consumer(void* arg) +{ + queue_t* queue = (queue_t*)arg; + size_t i = 0; + for(i = 0; i < MAX_NUMS; ++i) + { + printf("got %d from producer\n", queue_pop(queue)); + } + return NULL; +} + +int main(int argc, char* argv[]) +{ + pthread_t prod_thr, cons_thr; + pthread_cond_t valid_root; + pthread_mutex_t mx_cond; + queue_t myqueue; + queue_init(&myqueue); + + pthread_create(&cons_thr, NULL, producer, &myqueue); + pthread_create(&prod_thr, NULL, consumer, &myqueue); + + pthread_exit(0x0); + queue_clear(&myqueue); + return 0; +} + diff --git a/homework/assgn9/hw9.tar.gz b/homework/assgn9/hw9.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b851a52d954a9f533a280faf5d40d792ddc23280 GIT binary patch literal 1544 zcmV+j2KV_NiwFQId}UMs1MOICZ`(Ey&e!T!+%l}NUB4-@W3*li^xFpXW!PF^z%~Sm zL|a58(G{sA-r)bfJ5rKKTd|9w$A!W`+OLlJS2^gE+!ND_h-|w z{ZHgi{ppE+HaYjtX4A8FAfY#5(<_0W$}MO+NySME^4uV~B~T&Xx`LF95Oo-)H1u?5ce*<4{ zyXV~q9`#_Ai>L@$-Z8I1zU+GccmSXcx>P;$0573ajdYP|PAroDjqkv5a;ygyBJY?t z9Q?6XIfrM@c$XNoicA*iV;j24d8QVf z)1^@GLj;Rlq;<&t%uf5I_LW!}t=$8Dpd?5Go^|K}O$+-F#zC%qx%uO-(w%ZQ(OlAV ziEn-FJ3Y;91{@@=n;_xQWiEtrX468kJDg7MG~?Wg6r^kYWR3BRtIpGM+_>PV!e7NY zPb)k6+NpjWi9Wb%ch_w_G3%+0KRdg?`hRxepSSh@F^I~+3(yz<$}d3qA9_!gVF-gI41}&4 z4i`?8sp5H*7ugH%NuFvx&%=n~E5&sXF7z^bZd3x*@$)>f!cPX)$>^{>#+b{R`yR7k z@P7JLX5{12a8w5F0d*Y7|LJ66;lB%={}aE(e~&`P@Lvh`8nK=?>cOw#-d0fNJYdKYaC{PK+FTgAz1{7WFTcK z7LnAVXxacPCFpy9!_f>gq4Qh@3#QgXfS(syxRFZIXk`TuwCL)qU(4s2R3wAe-SQ-X z3{h6jLdI`UM}Y$fAR?|vT4jqANujvNP~++g z5Er?Og7v;X3^LR$Wst9p8x%K`FNqb+S&)gj6>$=$gO0}hf>l^D@?byG@7{laD+Yz+ z*%AU+CgLhcKqEAABh%rMDlbArGfe8Gg{&g3Sg5RRC}pC&KuQsEbT`82shD_3&??9k z4~qozs@ym-2Lo`$NIwdWphNNmb_Giebw-NHV=%JzzdIyxy^%g?2!wAaven+vFy=05 z0s`cq(b;7tB38n0dL&d%|0T5L3+T`*eD_iVK?iAD0_bP(Dr0xbpgaQXIWyxGzTVX8 zU3CU>8aafs5gr%J=@e|kumwo*_=vDWErM7$wwGAmSfk}2yZ*Pv$x3)xg8VHarAZA+ zDRjkEf_B=G(;>5@2cFmR6SrERoE)fOs&C z&Q(lR6q7(w1gv;eqHkkt6QDy3W!1B*xMeX?DP_xB3E6mChPrm%6YkCaR_{5qJrm96 zj}F+*4b3(~p!zB`9uM@VF{np2ad*pZgXXOMED4{pjZYflv>PSL?D9&--EPIwmAl>6 ze%0Bz%d!0i+7)5zftyXFqakhg_p+)#8& zW^MoX7}R`;zsiGU8X!IondhnXibZTu_6Jt}nu1#=sk!LhWkQ&%(|O}0{=8W%G@#^r zFP3{X2I^JNspr(DIgAL7V~d8^4Ev`nln~_D6S90jonL_NQH|ce(uSUWsa=^)Rv*F5 u^P{N9m2nu8%nyG)P}H|vnp$e9rIuQ1sil@$YN@3!O#cG+xFeDPC;$N21_*cn literal 0 HcmV?d00001 diff --git a/homework/assgn9/main b/homework/assgn9/main new file mode 100755 index 0000000000000000000000000000000000000000..9d6d97665323d56544e188ae14186edb900cb64f GIT binary patch literal 14539 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 XlH!)ib`(Xg+ROd#;&@dgQuV(9n6iyr literal 0 HcmV?d00001 diff --git a/homework/assgn9/makefile b/homework/assgn9/makefile new file mode 100644 index 0000000..1dc6efb --- /dev/null +++ b/homework/assgn9/makefile @@ -0,0 +1,12 @@ +main: hw9.c queue.h queue.c + gcc -g -o main hw9.c queue.c -pthread + +clean: + rm main + +tar: + tar -cf hw9.tar hw9.c queue.h queue.c makefile + +optimized: hw9.c queue.h queue.c + gcc -o main_optimized hw9.c queue.c -pthread -O5 + diff --git a/homework/assgn9/queue.c b/homework/assgn9/queue.c new file mode 100644 index 0000000..d47df16 --- /dev/null +++ b/homework/assgn9/queue.c @@ -0,0 +1,107 @@ +#include "queue.h" +#include +#include + +/* Requirements 4 & 5 for Homework 09 indicate that you should modify the add + * and pop methods for the queue to provide for thread safety. If you modify + * the producer and consumer methods instead you will not receive full credit + * for the solution. Additionally, the due date for the homework is now + * Thursday to provide for the necessary modifications to fulfill requirements + * 4 & 5. Please note that you should NOT be using a global mutex. Any + * structures you use to protect the queue should be associated with the + * particular queue that is being used (the one given to the add/pop methods). + * */ + +/* private methods */ + +static void clear_node(queue_node_t* node) +{ + if (node != NULL) + { + clear_node(node->next); + free(node); + } +} + +static queue_node_t* create_node(int value) +{ + queue_node_t* node = malloc(sizeof(queue_node_t)); + node->value = value; + node->next = NULL; + return node; +} + +/* public methods */ + +void queue_init(queue_t* queue) +{ + queue->root = NULL; + + queue->mx_pop = (pthread_mutex_t *) calloc(1, sizeof(pthread_mutex_t)); + queue->mx_push = (pthread_mutex_t *) calloc(1, sizeof(pthread_mutex_t)); + queue->mx_valid_root = (pthread_mutex_t *) calloc(1, sizeof(pthread_mutex_t)); + queue->valid_root = (pthread_cond_t *) calloc(1, sizeof(pthread_cond_t)); + + pthread_mutex_init(queue->mx_pop, NULL); + pthread_mutex_init(queue->mx_push, NULL); + pthread_mutex_init(queue->mx_valid_root, NULL); + + pthread_cond_init(queue->valid_root, NULL); + + return; +} + +void queue_clear(queue_t* queue) +{ + clear_node(queue->root); + free(queue->mx_pop); + free(queue->mx_push); + free(queue->valid_root); + return; +} + +/* edit */ +void queue_add(queue_t* queue, int value) +{ + pthread_mutex_lock(queue->mx_push); + pthread_mutex_lock(queue->mx_valid_root); + + if (queue->root == NULL) + { + queue->root = create_node(value); + pthread_cond_signal(queue->valid_root); + pthread_mutex_unlock(queue->mx_valid_root); + } + else + { + pthread_cond_signal(queue->valid_root); + pthread_mutex_unlock(queue->mx_valid_root); + + queue_node_t* last = queue->root; + while (last->next != NULL) + { + last = last->next; + } + last->next = create_node(value); + } + pthread_mutex_unlock(queue->mx_push); + return; +} + +/* edit */ +int queue_pop(queue_t* queue) +{ + if(queue->root == NULL) { + + pthread_mutex_lock(queue->mx_valid_root); + pthread_cond_wait(queue->valid_root, queue->mx_valid_root); + pthread_mutex_unlock(queue->mx_valid_root); + } + pthread_mutex_lock(queue->mx_pop); + queue_node_t* temp = queue->root->next; + int value = queue->root->value; + free(queue->root); + queue->root = temp; + pthread_mutex_unlock(queue->mx_pop); + return value; +} diff --git a/homework/assgn9/queue.h b/homework/assgn9/queue.h new file mode 100644 index 0000000..8ef2f7f --- /dev/null +++ b/homework/assgn9/queue.h @@ -0,0 +1,21 @@ +#include +#pragma once + +typedef struct queue_node { + int value; + struct queue_node* next; +} queue_node_t; + +typedef struct queue { + queue_node_t* root; + pthread_mutex_t *mx_push, *mx_pop, *mx_valid_root; /* critical funcs are per-instance */ + pthread_cond_t *valid_root; +} queue_t; + +void queue_init(queue_t* queue); +void queue_clear(queue_t* queue); + +void queue_add(queue_t* queue, int value); +int queue_pop(queue_t* queue); + + diff --git a/lab/.sighandler.c.swp b/lab/.sighandler.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..be4b1791affdb16e4897c8e691a486f0293297ab GIT binary patch literal 12288 zcmeI&JxT;I6bJCEorNfRfvAm&&a59`BUTn#Sgws&WRkE6W->C#Y9VSXqIc0lcm?qg z9>N!$1wUAeZDimdc$4H!5;DIoOp5N&!6DzywiuO}^!O| z=X0~YG1tK~2tWV=5P$##AOHafK%k8R@vOscXyX&j<|muF^P_IMs2~6V2tWV=5P$## zAOHafKmY;|XrX{mjO|Y|c1w}|{}0dqZ`6OKc&2!wc%*osxTm+`~8X7_6@DqH%?t}sQ++rQh!{e*D<22#B{?Taw|hy zWUgf=PHmwRcg>K>+rb4r9s9;pX&SVnu8C~wg{tMU?j5Qta~Xugt}^5REI|MQKMQ2` zQf`f(uC1;VUBUd^teBZT{kayi5P$##AOHafKmY;|fWW^Lu)Ptw<2xH2+#NsmzqgTZ z{a}a=0uX=z1Rwwb2tWV=5P$##AOL|sD4=|zrwO9`B>#AR|Nrs)|H9)w=b3ZQ2{;{& z<{WVLIaSUA$L-zVpg{lv5P$##AOHafKmY;|fB*#kv_LMuRIM%x{@kwbG~Aa)oyW2* zWUWZPX=Uv)(Jxh`!qBbecu&RsM@pX>g^IZxga+HLmV+R>;))6Nbh&3t@mL!ie77#5Q`q~Y*OM4@;t2Rut?U|r6Mmn zX_jY$B+G}HuS>HmD>{&D^jqC)tz!nDb7{m}N&RHqbNT<&OR2ePD*nT{)G?hQcV5BZt{-j z=6@&sKL6=(u(O>1JQ?8p{|UX5!{eimd%%<;g!8iBTGO9M-LE+(qj#qVp4LE*6Y?+58A1plgb+dqA%qY@2qAt*e#DO@$XKZv5Nl_jDLGV@o$f(I{x>87fBYTRm5P>MC8C& zt-UEllqR=Fi?^+{I^t>3C3i4LAVI`kj8g6Gt2m90Dv?? z{sq6~sn;x|EdE>Nn|;ZAv5l_20bhU`lsArTll|~poO2U-qh_{8Lckkn?f2l|02eKy zl%m!g9Dw7kX_Z!gO+4-pKN#{s z&*Nj%FDW4ms*;sZGC?c>_t97$2_lEQU_1~Etp`QGgEVDnTfMchk}MIvnt2-^LwpKm zzG{(-;OCE*m!q1{Y$;A&Ic&r+)eP?+eUuh`xk?WUFMx@PXYwRZsishGUMX!UZkD=3 zMc_*fP5HDo1^zvkPPiehBCD-8B-hO5Oc^oF^Mb6!zOt}FYvmcB(?FEOF*O^C~tA?4i;g8Co)S{qi7zDTZ9Rn-}40x5bU60HpW0d15zRE6Uoru(-wNIRX zy7=H;FEmt^T7M&%5;>dx9jF z)j!O$Qpl<`zuZ#YTBKLoDx7KqR;g6gT$1hSO?Ba2vSnD@n^Kxly=m0WHkb*zvoiUE zM4iorBxx|NBRN;_rUGi292IAyG8m;dzkH^4(tmLWkD9Rkbw*O;*c`l!MuX<|*UeA2w6w^7%Lb2ZA?>is_-~?qmpr!p|1+LU zSNY!=J2L+}`uE>n@FHR{wK45%gpJ{|lCbxzl +#include + +struct point { + + int r; + int c; +} pt; + +int gResult[MATRIX_SIZE][MATRIX_SIZE]; + +void mult_entry(void *ptr) { + + struct point *deref_pt = (struct point*) ptr; + + gResult[deref_pt->r][deref_pt->c] = matrix_multiply(deref_pt->r, deref_pt->c); +} + +int main(int argc, char* argv[]) +{ + int row, col; + int left[MATRIX_SIZE][MATRIX_SIZE]; + int right[MATRIX_SIZE][MATRIX_SIZE]; + pthread_t threads[100]; + + for(row = 0; row < MATRIX_SIZE; ++row) + { + for(col = 0; col < MATRIX_SIZE; ++col) + { + left[row][col] = (rand() % 2) + 1; + right[row][col] = (rand() % 3) + 1; + } + } + + // this causes setleft and setright to operate in parallel + { + pthread_t init_thread; + pthread_create(&init_thread, NULL, + ({ + void* setleft(void* arg) { set_left(left); return NULL; } + setleft; + }), NULL); + + set_right(right); + pthread_join(init_thread, NULL); + } + + /* change this loop to execute on 100 different threads (each thread does 1 row) */ + for(row = 0; row < MATRIX_SIZE; ++row) + { + for(col = 0; col < MATRIX_SIZE; ++col) + { + + struct point curPoint = { row, col }; + + pthread_create(&threads[(row * 10) + col], NULL, mult_entry, (void *) &curPoint); + } + } + /* make the above line run in parallel */ + + print_matrix(gResult); + return EXIT_SUCCESS; +} + + diff --git a/lab/lab7/matrix.c b/lab/lab7/matrix.c new file mode 100644 index 0000000..6a559b8 --- /dev/null +++ b/lab/lab7/matrix.c @@ -0,0 +1,48 @@ +#include "matrix.h" +#include +#include + +const int gLeft[MATRIX_SIZE][MATRIX_SIZE]; +const int gRight[MATRIX_SIZE][MATRIX_SIZE]; + +void set_left(int matrix[MATRIX_SIZE][MATRIX_SIZE]) +{ + memcpy(gLeft, matrix, MATRIX_SIZE * MATRIX_SIZE * sizeof(int)); + return; +} + +void set_right(int matrix[MATRIX_SIZE][MATRIX_SIZE]) +{ + memcpy(gRight, matrix, MATRIX_SIZE * MATRIX_SIZE * sizeof(int)); + return; +} + +int matrix_multiply(int row, int col) +{ + int sum = 0; + int i = 0; + for(i = 0; i < MATRIX_SIZE; ++i) + { + sum += (gLeft[row][i] * gRight[i][col]); + } + if (((row + col) % 10) == 0) + { + sleep(rand() % 3); + } + return sum; +} + +void print_matrix(int matrix[MATRIX_SIZE][MATRIX_SIZE]) +{ + int row, col; + for(row = 0; row < MATRIX_SIZE; ++row) + { + for(col = 0; col < MATRIX_SIZE; ++col) + { + printf("%d,", matrix[row][col]); + } + printf("\n"); + } + return; +} + diff --git a/lab/lab7/matrix.h b/lab/lab7/matrix.h new file mode 100644 index 0000000..5e6a6f8 --- /dev/null +++ b/lab/lab7/matrix.h @@ -0,0 +1,8 @@ +#define MATRIX_SIZE 100 + +void set_left(int matrix[MATRIX_SIZE][MATRIX_SIZE]); +void set_right(int matrix[MATRIX_SIZE][MATRIX_SIZE]); + +int matrix_multiply(int row, int col); +void print_matrix(int matrix[MATRIX_SIZE][MATRIX_SIZE]); + diff --git a/lab/lab8/.Makefile.swp b/lab/lab8/.Makefile.swp new file mode 100644 index 0000000000000000000000000000000000000000..90713d9cfa62f75c3184bf5f00e006a6ae40cb15 GIT binary patch literal 12288 zcmeI%yH3L}6b9f^Hl%V9tbojAfWb|&;b~@s1z#10B+*8QFEyr2bf@E=fx23 zfW!;H18@Qb2?X6izooy9?PI6;wkVC_@y@PTEvyi?QKF|iUAxcEQ>jMOF**$VC|l{< zB7G^_abgSYIMjVAuX_hNZtQ7CC5hjPLLJ$}2~;CX$=OvM-SmTgr}Vi2mLLFup9NCe zl%*kBURo?>1+z2LVtnlA=UU7{00Izz00bZa0SG_<0{>FLc5`&YPd3ndx_qzCed~Ke zbP#|51Rwwb2tWV=5P$##AOHaf{6PWb5j_kOO^ooL=kNa?@Bc46e&#%KZaIo`&N<~& zIGdbx&Lk(>JHeNb!MXWLWkK-oMs@2jyEv@!Shj@R zFOsJlX={z>mnu?0z^lBYY>j{6tKckY>mVq&LdN3D6uq5amUZ4DWL+B*o2@F;jtePw^M#8u;W-;n!>GagpY`5D}-F8pMC$xK(hdavs9 zY7U#7&cu5s-sXoJ2N_=58GHGroWC(KTTWy@43wGK@TKIL{eG0{h9C9i29X!a zgiR53Wz$R3U`h3*(rGjFI))=nodhd^7rLo0!>}PXNJdj+fDAmlflT-IAKA(dOifOh zMZ0R_{G}bIo_#$1Dv z86X2>fDDiUGC&5%02v?yWPl8if#=YG*JbRp&5V7w1)InJ{|A5n|24+gAK(}84fq_~ z0GGif;DXbj4Nih4Xn>vIRqzVfcxMsxC6cbpMa~t1AD;VTN!%<{sa%f&)_HU zHMk9KfotF@xB`~JM_>^wfDgf8a0rZpF|ZB%_abBW!0+HI@Fn;ZTmu4p0Nw{%zyqBB zH*go+0Y8Et!1uto`4(IUrvbgl02v?yWPl8i0Wv@a$iR~gSd5)#Rw8wlC_XX6m}SM< zPo&p%g{OoJ?cyn2(Ek64O|13NC}i#1H^?4kO3P%XQm`wvC;UpmVjD%^V!awFFr}rv zXLWNUu@0X*)owdno|VGIkAI6WhX*RowA;ygNQS~z2dkD%-k@iXr#exhAKSwqhu1#N z0$p?X!Ft`q_m-qitMgOS(+*E{H&A)PGky?Cd*eL(95M|{@YlI5d@td9>s)wY7zumQ z;nR~-=Cq@x5SsU=2p?uZT%a@`jm7EAVBZTAwyU|9ED47fEAe?{VX~Z(l?A)~!=7m)p;)4muc%FiNGJ%QhgK zPX=xW*DPH?2N$t;SD-|gbtQkz{8HWv8~z*BG5l6uEsc(qsYVCQHz-;+6b2nL_83=P B$`Swo literal 0 HcmV?d00001 diff --git a/lab/lab8/Makefile b/lab/lab8/Makefile new file mode 100644 index 0000000..c538a93 --- /dev/null +++ b/lab/lab8/Makefile @@ -0,0 +1,12 @@ +.PHONY: all + +cc=/usr/bin/gcc +CARGS=-Wall -Werror -Wextra -pedantic -Wno-unused-parameter -Wno-unused -Wno-format -pthread +SRC=trivial_shell.c -o trivial_shell + +all: + $(CC) $(CARGS) $(SRC) + +debug: + $(CC) $(CARGS) $(SRC) -g -O0 + diff --git a/lab/lab8/lab8.tar.gz b/lab/lab8/lab8.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e688b0d3d5e7e1d980bf38ebc29314ae96047d9f GIT binary patch literal 777 zcmV+k1NQtMiwFQ@pk-751MQY=Z__XkfcrK66{ft%De0EB+aNofC_%Ufv++dhqfu^fkZ~lRHg~{n=w^%$u(E& z(qbG$YDqQB(+kC^k4{g92U>|MLBnaX;9(&{ZUS%tB6O8c!Eg z`XN^&7dB!Ma~uCa$olYUJi-k|6Ftp@FwI&$-~&twy^Skn%)%()BzMq9w`G(Dzu{~u z`E`*(8AZrA)kPS#fPGMe$)yf%M5&(6(x6}EkUdvXN?n#fG1JBjURDt!o`bty3qo7J zoUNPXg33j?h&YP5B>#rPLl=Ms+fbz)!4Xlxjr@Fno-Gk2s>SKa{T4+ zWHfj`9S$bL(RezV4Bm}L4xW4+kL@fgcu$jlzo>~7%(+fTxmE{5+nn_nU?Bn$@F*ZF zsSQGF29YmweGEH82c-TosTWhhQI_2;`orR)n0UEc#dWGAc5mFggWv)$sgNWaP&H=` zE~*LRtMiK@*-TeCj8X|7p?=lXyrxAfk+o?9#fKQy%HqC;BI|kq|4Ib5yJX9ltR_Lb zzNbRN3On{j<<>0n+GPhyt_t_;en(q{tn!8{wDDDSls1=hQFPM5o7>&Ns}Nc7SI&H{ zDO->`eC4LEU;kFr+qDkm{jtn9)?hFg3h H04M+eCYOJ$ literal 0 HcmV?d00001 diff --git a/lab/lab8/trivial_shell b/lab/lab8/trivial_shell new file mode 100755 index 0000000000000000000000000000000000000000..5768ff0df6c7f741045359e49232c3de63a29e99 GIT binary patch literal 10023 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 +#include +#include +#include +#include + +pthread_t threads[255]; + +void cleanup_handler(void *pipe) { + + FILE *cast_pipe; + + cast_pipe = (FILE *) pipe; + + pclose(pipe); +} + +void *exec_newthread(void *input) { + + char *cast_input, *out_buf; + FILE *out_pipe; + + out_buf = (char *) calloc(1, 512); + cast_input = (char *) input; + + out_pipe = popen(cast_input, "r"); + pthread_cleanup_push(cleanup_handler, (void *) out_pipe); + pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); + + for(;;) { + + fgets(out_buf, 255, out_pipe); + + if(feof(out_pipe)) + break; + + printf("%s", out_buf); + } + + pthread_cleanup_pop(1); + + return 0x0; +} + +int main(int argc, char *argv[]) { + + int thread_counter; + char *input_buf; + + thread_counter = 0; + input_buf = (char *) calloc(1, 512); + + while(strncmp(input_buf, "quit", 4)) { + + fgets(input_buf, 255, stdin); + + if(!strncmp(input_buf, "quit", 4)) + break; + + pthread_create(&threads[thread_counter], NULL, exec_newthread, input_buf); + pthread_detach(threads[thread_counter]); + ++thread_counter; + } + + return 0; +} + + -- 2.41.0