From 04ba81cfb383e7f16b6c38a54dfdeb781e6dc8d0 Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Fri, 29 Sep 2023 15:18:13 +0300 Subject: [PATCH] restructure --- TMP/HW/main.c | 80 ++++++++++++++++++ TMP/Practice/29.09/code.c | 147 +++++++++++++++++++++++++++++++++ TMP/Practice/matrix/Makefile | 9 ++ TMP/Practice/matrix/func.c | 38 +++++++++ TMP/Practice/matrix/func.h | 15 ++++ TMP/Practice/matrix/main.c | 77 +++++++++++++++++ TMP/Practice/matrix/matrix_app | Bin 0 -> 16712 bytes TMP/Practice/trash/app | Bin 0 -> 16248 bytes TMP/Practice/trash/app_poll | Bin 0 -> 16992 bytes TMP/Practice/trash/app_poll2 | Bin 0 -> 16944 bytes TMP/Practice/trash/child.c | 86 +++++++++++++++++++ TMP/Practice/trash/done | 2 + TMP/Practice/trash/lect.c | 24 ++++++ TMP/Practice/trash/pin.c | 74 +++++++++++++++++ TMP/Practice/trash/poll.c | 133 +++++++++++++++++++++++++++++ TMP/Practice/trash/poll2.c | 142 +++++++++++++++++++++++++++++++ TMP/Practice/trash/prog1 | 37 +++++++++ TMP/Practice/trash/text | 2 + 18 files changed, 866 insertions(+) create mode 100644 TMP/Practice/29.09/code.c create mode 100644 TMP/Practice/matrix/Makefile create mode 100644 TMP/Practice/matrix/func.c create mode 100644 TMP/Practice/matrix/func.h create mode 100644 TMP/Practice/matrix/main.c create mode 100755 TMP/Practice/matrix/matrix_app create mode 100755 TMP/Practice/trash/app create mode 100755 TMP/Practice/trash/app_poll create mode 100755 TMP/Practice/trash/app_poll2 create mode 100644 TMP/Practice/trash/child.c create mode 100644 TMP/Practice/trash/done create mode 100644 TMP/Practice/trash/lect.c create mode 100644 TMP/Practice/trash/pin.c create mode 100644 TMP/Practice/trash/poll.c create mode 100644 TMP/Practice/trash/poll2.c create mode 100644 TMP/Practice/trash/prog1 create mode 100644 TMP/Practice/trash/text diff --git a/TMP/HW/main.c b/TMP/HW/main.c index e69de29..5548adb 100644 --- a/TMP/HW/main.c +++ b/TMP/HW/main.c @@ -0,0 +1,80 @@ + +#include +#include +#include +#include + +#define SIZE 100 + +void matrixMultiply(int matrix1[SIZE][SIZE], int matrix2[SIZE][SIZE], int result[SIZE][SIZE], int n) { + int i, j, k; + for (i = 0; i < n; i++) { + for (j = 0; j < n; j++) { + result[i][j] = 0; + for (k = 0; k < n; k++) { + result[i][j] += matrix1[i][k] * matrix2[k][j]; + } + } + } +} + +int main() { + char* file1 = "matrix1.txt"; // Имя файла для первой матрицы + char* file2 = "matrix2.txt"; // Имя файла для второй матрицы + char* fileResult = "result_matrix.txt"; // Имя файла для результирующей матрицы + + int matrix1[SIZE][SIZE], matrix2[SIZE][SIZE], result[SIZE][SIZE]; // Матрицы + + // Открываем файл первой матрицы + int fd1 = open(file1, O_RDONLY); + if (fd1 == -1) { + perror("Не удалось открыть файл для первой матрицы"); + exit(1); + } + + // Считываем данные первой матрицы из файла + int bytesRead = read(fd1, matrix1, sizeof(int) * SIZE * SIZE); + if (bytesRead == -1) { + perror("Ошибка при чтении первой матрицы"); + exit(1); + } + close(fd1); // Закрываем файл + + // Открываем файл второй матрицы + int fd2 = open(file2, O_RDONLY); + if (fd2 == -1) { + perror("Не удалось открыть файл для второй матрицы"); + exit(1); + } + + // Считываем данные второй матрицы из файла + bytesRead = read(fd2, matrix2, sizeof(int) * SIZE * SIZE); + if (bytesRead == -1) { + perror("Ошибка при чтении второй матрицы"); + exit(1); + } + close(fd2); // Закрываем файл + + int n = bytesRead / (sizeof(int) * SIZE); // Размер матрицы + + matrixMultiply(matrix1, matrix2, result, n); // Выполняем умножение матриц + + // Открываем файл для результирующей матрицы + int fdResult = open(fileResult, O_WRONLY | O_CREAT | O_TRUNC); + if (fdResult == -1) { + perror("Не удалось открыть файл для результирующей матрицы"); + exit(1); + } + + // Записываем результирующую матрицу в файл + int bytesWritten = write(fdResult, result, sizeof(int) * n * n); + if (bytesWritten == -1) { + perror("Ошибка при записи результирующей матрицы"); + exit(1); + } + close(fdResult); // Закрываем файл + + printf("Результирующая матрица успешно записана в файл '%s'\n", fileResult); + + return 0; +} diff --git a/TMP/Practice/29.09/code.c b/TMP/Practice/29.09/code.c new file mode 100644 index 0000000..488c0ad --- /dev/null +++ b/TMP/Practice/29.09/code.c @@ -0,0 +1,147 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define NUM 4 +#define errExit(msg) do { perror(msg); _exit(EXIT_FAILURE); } while (0) +#define errExit1(msg) { perror(msg); _exit(EXIT_FAILURE); } + +void child_handler(int sig) { + pid_t pid; + while((pid = waitpid(-1, NULL, WNOHANG)) > 0); +} + +void int_handler(int sig){ + printf("Ctrl-C pressed, do nothing...\n"); +} + +int main(int argc, char *argv[]) { + + struct sigaction new_act, old_act; + sigemptyset (&new_act.sa_mask); + new_act.sa_flags = 0; + new_act.sa_flags = SA_RESTART; + new_act.sa_handler = child_handler; + + sigaction (SIGCHLD, &new_act, &old_act); + + struct sigaction nint_act, oint_act; + sigemptyset (&nint_act.sa_mask); + nint_act.sa_flags = 0; + nint_act.sa_flags = SA_RESTART; + nint_act.sa_handler = int_handler; + + sigaction (SIGINT, &nint_act, &oint_act); + + int pipefd[NUM][2]; + pid_t cpid[NUM]; + + int nfds, num_open_fds; + struct pollfd *pfds; + int ready; + + unsigned char i,tt; + char buf; + int rr; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + _exit(EXIT_FAILURE); + } + + srand(time(NULL)); + + num_open_fds = nfds = NUM; + pfds = calloc(nfds, sizeof(struct pollfd)); + if (pfds == NULL) errExit("malloc"); + + for (i=0;i 0) { + + do{ + dprintf(STDOUT_FILENO,"\ntry poll:\n"); + for (i = 0; i < NUM; i++) pfds[i].revents=0; + ready = poll(pfds, nfds, -1); + if(ready == -1) + switch (errno) { + case EINTR: dprintf(STDOUT_FILENO,"\nPoll interrupted, repeat.\n"); + continue; + default: errExit("poll"); + } + } while (ready <= 0); + + for (i = 0; i < NUM; i++) { + if (pfds[i].revents != 0) { + dprintf(STDOUT_FILENO," fd=%d; events: %7s%8s%9s%8s%8s ", pfds[i].fd, + (pfds[i].revents & POLLIN) ? "POLLIN " : "", + (pfds[i].revents & POLLHUP) ? "POLLHUP " : "", + (pfds[i].revents & POLLNVAL) ? "POLLNVAL " : "", + (pfds[i].revents & POLLPRI) ? "POLLPRI " : "", + (pfds[i].revents & POLLERR) ? "POLLERR " : ""); + if (pfds[i].revents & POLLIN) { + + do { + rr=read(pfds[i].fd, &buf, 1); + if (rr < 0) + switch (errno) { + case EINTR: dprintf(STDOUT_FILENO,"\nRead interrupted, repeat.\n"); + continue; + default: errExit("read"); + } + if(rr == 0 ) + dprintf(STDOUT_FILENO,"\n"); + else + dprintf(STDOUT_FILENO,"[%2X]",buf); + } while (rr > 0); + + } + else + if ((pfds[i].revents & (POLLHUP | ~POLLIN))) { + dprintf(STDOUT_FILENO,"Closing [%d], pipefd %d, pfds.fd %d\n",i,pipefd[i][0],pfds[i].fd); + if (close(pfds[i].fd) < 0 ) errExit("close pfds"); + pfds[i].fd = -1; + pfds[i].events=0; + num_open_fds--; + dprintf(STDOUT_FILENO,"Still opened fds %d\n",num_open_fds); + } + } + } + } +printf("Niggers"); +while (1) pause; + return EXIT_SUCCESS; +} diff --git a/TMP/Practice/matrix/Makefile b/TMP/Practice/matrix/Makefile new file mode 100644 index 0000000..be9314c --- /dev/null +++ b/TMP/Practice/matrix/Makefile @@ -0,0 +1,9 @@ +LIB = + +default: run + +build: + gcc func.h func.c main.c -o matrix_app ${LIB} + +run: build + ./matrix_app diff --git a/TMP/Practice/matrix/func.c b/TMP/Practice/matrix/func.c new file mode 100644 index 0000000..61c881b --- /dev/null +++ b/TMP/Practice/matrix/func.c @@ -0,0 +1,38 @@ + +#include "func.h" + +void init_matr(int c, short int mat[c][c]) +{ + for (int i = 0; i < c; i++) + { + for (int j = 0; j < c; j++) + { + mat[i][j] = rand() % N; + } + } +} +void out_matr(int c, short int mat[c][c]) +{ + for (int i = 0; i < c; i++) + { + for (int j = 0; j < c; j++) + { + printf("[%d] ", mat[i][j]); + } + printf("\n"); + } +} + +void trans(int c, short int mat[c][c]) +{ + for (int i = 0; i < c; i++) + { + for (int j = i + 1; j < c; j++) + { + short c; + c = mat[i][j]; + mat[i][j] = mat[j][i]; + mat[j][i] = c; + } + } +} diff --git a/TMP/Practice/matrix/func.h b/TMP/Practice/matrix/func.h new file mode 100644 index 0000000..033dc2c --- /dev/null +++ b/TMP/Practice/matrix/func.h @@ -0,0 +1,15 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define N 10 +#define n 100 + +void init_matr(int c, short int mat[c][c]); +void out_matr(int c, short int mat[c][c]); +void trans(int c, short int mat[c][c]); \ No newline at end of file diff --git a/TMP/Practice/matrix/main.c b/TMP/Practice/matrix/main.c new file mode 100644 index 0000000..e912db0 --- /dev/null +++ b/TMP/Practice/matrix/main.c @@ -0,0 +1,77 @@ + +#include "func.h" + +int main(int argc, char *argv[]) +{ + int pipefd[n][2], fd_ans; + caddr_t addr_ans; + pid_t cpid[n]; + short mat1[n][n], mat2[n][n]; + fd_ans = open(argv[2], O_RDWR | O_CREAT); + srand(time(NULL)); + init_matr(n, mat1); + init_matr(n, mat2); + out_matr(n, mat1); + trans(n, mat2); + printf("\n"); + out_matr(n, mat2); + printf("\n"); + for (int i = 0; i < n; i++) + { + if (pipe(pipefd[i]) == -1) + { + perror("pipe"); + exit(EXIT_FAILURE); + } + cpid[i] = fork(); + if (cpid[i] == -1) + { + perror("fork"); + exit(EXIT_FAILURE); + } + + if (cpid[i] == 0) + { + int result[n]; + close(pipefd[i][0]); + for (int j = 0; j < i; j++) + { + close(pipefd[j][0]); + close(pipefd[j][1]); + } + for (int j = 0; j < n; j++) + { + int sum = 0; + for (int k = 0; k < n; k++) + { + sum += mat1[i][k] * mat2[j][k]; + } + result[j] = sum; + } + write(pipefd[i][1], result, n * sizeof(int)); + close(pipefd[i][1]); + exit(EXIT_SUCCESS); + } + else + { + close(pipefd[i][1]); + } + } + + printf("Resulting mat\n"); + for (int i = 0; i < n; i++) + { + waitpid(cpid[i], NULL, WNOHANG); + int result[n]; + read(pipefd[i][0], result, n * sizeof(int)); + for (int j = 0; j < n; j++) + { + //printf("[%d] ", result[j]); + addr_ans = mmap((caddr_t)0, PROT_READ | PROT_WRITE, MAP_SHARED, fd_dst, 0); + + } + printf("\n"); + close(pipefd[i][0]); + } + exit(EXIT_SUCCESS); +} diff --git a/TMP/Practice/matrix/matrix_app b/TMP/Practice/matrix/matrix_app new file mode 100755 index 0000000000000000000000000000000000000000..c8b2ab82a33a7ec846c39ae9838b55a86bc6655f GIT binary patch literal 16712 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 literal 0 HcmV?d00001 diff --git a/TMP/Practice/trash/app b/TMP/Practice/trash/app new file mode 100755 index 0000000000000000000000000000000000000000..e287e7b9daaecc31ff00def9ad34c2c7fd285a6c GIT binary patch literal 16248 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 X%B5Y2rD=I7{x|4{4YJ-x@TuybQ?#mI literal 0 HcmV?d00001 diff --git a/TMP/Practice/trash/app_poll b/TMP/Practice/trash/app_poll new file mode 100755 index 0000000000000000000000000000000000000000..8384509aaaec3069e94548556999b7e8787251e8 GIT binary patch literal 16992 zcmeHOdvH|Oc|R-hkTI|VgQGxWuH7hx6qbj901oy7T6~oXP{gAo4!*3kchR~lt-8Cy z$TczcB8Ii17-wReb`lTiAGPaDTc+a@*KO?OVFaF(u02jhlXf~vN|N1y+K?ItCl1@+ zch31%cdvAvOgn97I(szQ?|i@SalU)*dE9gFIgf@~HrDujf>W)yM-X>lhC+f`aBPjv zfCR-VF%7@-#BE{{_z4nI@}MG+sx(|vN$WIT3rcnklo^Nqj)DbKj*uwXd8NZsl!U3M zS3KEGq^#!M^roAY9#fW=%QKW*xae+ueN3HpR5$rW$}YdQl8$IQp|79q2qwD`Z8xIr z%9H{kxu#s7R44SmO8awD12Rg6{1w7&w^Q4>X_MAxN@Y;m`jd3zzfxYSw%d8T^5dq< z6)c!?d7pS`5>-Rl|oTwpe4*uV?FLbT``2cqll2xSD;AU1JiaF|me;>G^ zR4RV&0ymzY=^prBc;I(>;9vH@6CU_qd*A^N{EHs=LmqgW2mTcg{3>t*|L*h&0OQqL zg9m=l1E1`HQ^PPIb0@&#mV1W>e!mC48#vjx)9(YAffkqxDhZD#A{Dpo9?@eblZm8A z#rA|d(y>Ih=t;!mA|30pMKqE8Ly<}+<94@5+Tn<>?0vDcuq^br4l9)oC(~9}IMxlF z2)u}BPcqh>j*3(=+zn-`V_(>c#=67t*u%DnXkkY<9#3?Lj(8$vi-*FobWbcorQ2OS z>AsXr?%}IDVL>Y_19~VKOWUF+)?*7Qn0od~abHXG`VH2yz_P%Ka{jL6!fM{O$wDyp zo>(evC%0|d5Kna5+rsT}8;76XNBTA5B~&qwXT5V` zH_<5Zs>WV=>KP0RHR26*8wAfYd_Q*U#y70z5ylOTzYtW0j5D9RSK&0~P+Q`3&VlPG zLyGbaoMR=yumhjXPC!Q-IE`hTxINLhO5Uv z^hi)KgnvwB6%jB%$%t^ zT@I$S;thyOjo-tse_jwd;yX!R94R3+o+6$e5sG=qze0Qs@j1!=4e|7-P&_XA7m25- zx_C_Te?~k_(ZwT@|5M^=YAzm-{MU%5>7v*p`6q~{skpdX@{bcwQ*g0W@(&YFQ*SXS z`6Tf)x=|B!tE)Eu1nb0Vv+r)T5#-N4%dx_vj5M*Q;*knU+sp?_ZL zuQ)|y!3{He#XR}Wz2?d5wWjZ^`R0xEEI9Z_?VzqS67|n(8nyoq|82iKu=bm<6}`W= z-OQ|g5t_ox{v8~ce%pB;KE(hvS0WVPn3{Ja- zhGAwez_)Z-_$~}yqi74aP>u>JoJS62KMpb!8ljdv5E{vbF5}lc`YN?d3M~b(nGFq_ znf=3}_u~lfFQxCH!rzf6>GQP@QEB}a0u{wSMwcmEAlD~fp+$Q(|Nf7nCku7?LiW_j zAJ_U$WzQ|hAMSqu%Kj6YF&bda;kLC$eH$oWq^tx9~$9Gpro3xqkaec1H9VICbg_&WK{)|89O znS--lS30N&Up_h%oZu5>@o?b+d?W6T)7h{0@0M|$9ylm-9M5y;xfJ6;XsSwk;#ZCf z%2Bb>pg-sDzZ11u_AW&#qM^dmFd7OKD3(i~9tagiqa7;rLB>#;E?}q-1(XRDe51}* zhYF7jaf_kWHz31W1Vs~9pqr8u)QwunV#p`j6x_c1OLyq6OX1)k)v4?iO7X0xBHe$7 z;y0C|Y85#Y5l2Adln=?*psE_MIqE%=^BvYrNRrRi`VZ~Jtse?qly&v7fzZYBMZn1> zm}Wv3D=OyVBR?DnUCvVTyM}StL}#Pct(xCL7!)5zCxP_6G1BRf>JD&eu_Np;%?9&< z7LSd1?^)`39p}t}(C{lXo~RC7SPJLa(A$~)ZO7ECZGLT=Q zZn{^Bh6*!bu3B6JMDQZ~U;PZcbBBEnbDC$!{_g}QMbRV=(#-dfT1PV@bu@Bg@bRJK zOOtixHyPC^quD>efI~*JzlV&|Xt|^3U7>hTlA(;&zNn4XKKol3)hnYFk7}b8?G;8X zgA>XnwfJ(nB%d;xxK$fXT!c)MjxU4(YxCe#Y1V?fw#j!cG*JKfw&v^y&6u9DC!4Yu zUM3nasccRE`U~9M%$a)Ubykcpqow-~{u3IZry{!V;NY&x&U6gkv!Q%ue_r$j3p2ru zHkj|=38XTXHpnko2=iqr8Y=txc3nSzT0Z|)Jn_=FS54I#sMbKW2LAuo0DWJev^^ExW3Mq9 zQ^sfUZ6?;e=bkB|OMg`9jKw2HW5kHZqP9WbaEw^WXxuqPeLa!ibGG!@-L_PsFDj{p z27QBpmp~veMNCO2`waR3vkZlWJU*YFsUUSEUR?OliYc zCXXWJ2dF9H{>EiHcTqJ6eA!7MZsY#O$gYJ3T}+fN3)yHS6_EKU>NAr>#MX2S*OO3} z4;ARry9eQ$TYEQs!=8x$bMKT&2S6LHlu9pv&IfG;opH5P%7NYkIs!_G->v%|ZWF$J z^}e}NC)XYEO|B=LKJw<@EtT#dMV-di7vhtUlYS6ox6sO9){AbE~kyZ>J&ynozX@JihdHfp*<)2OC< zH9e&1Gn)RnrYAH#tLYCk{i&w!YdT49KD$-ZPieYR(~X+$&@`$k$NNH1%1@G(EE(G;2A9nn4zh(R#WSsjC8NV47 zG9Er3xWP&eIt>GXft~Wlf({VbCJ#S5Jn*;&{$=3x@PFLpzn}DL(8zh9)Wr{Y_<7C) zKkk8_@xZ_Df&bJ4zwUwGjC!N%a@Sh}@bT(@p$Fas+|bwVBwK;cz-a~UzbxBLIPFN) zM)<%ZQ^Ldl0pRuMFZrNW)MSR#_m|Hr-J$V*t?#~HPig&U^u@_{SFm|T;+4LMd)@>8 zdk_2qaJpW1xjzJMjCC*G^YAkXJ+89KorGh2i0SK+@9ZF4A#v6k zr9bm%4;!IB?!Nx59m(|4Kmz;S!|gFE9o{1Vq|&|7XrM!k?v1z7T^4rXciSmwMiSPZ zc%nTVw<768GG&E(_lb@~S5Mr=i{HSK@il03f6NLeli@xKuXK}rBAN_$*;b^ttE&$t z4$gvRxcH6?rYhyeqD>T zW#h)Jp>5W-b?aL~uy7wn2=d7QIt}1DN>G;3sez9?DnJJvDzwYzBPvjNG@$~q>_|8r z7P4ye*@+4{YCL6EAo^fL1x9bPD*$@?T>;2578Qs(SWyAtz9JZP;(mWMyuQz>1rJR(B3yFyJL{iwjyS(FOM zvT%ljTL&HP827}6Jj&v-bDln_6j56g9rUe4UlWe5;HXQ5k~-2-0f|7WuPYsH2Tdmx z?c|*NOwuC)-HEgv*wft`=t<&BLo(gxfZBUe;v$@OQCjQPH!q^jDb+i}sZJ4y^mU^M zMbk+o*=r|LbSy`zX~u#qX~)B4pmRO(vp!%nnx@5NJbs$q- z_d!J_^5IN>1cugFY|rZ|rc}R_IDXb+O6Lk`&BpvO3KWUy62;0ocE+z^F^CM+Dcke9 zktwemxqSEaKdbH6YlplJWjdlSnCz*}-1grBMk?&TJn!rIpVzlgk;#4kzX8-~Z)iKF z^4p-cCBlytOrLkz_vrNvQ;wHiFwgY3%l?42FH>58ITDx4&o_4BsNT;40T zC92jbqxVl3TB_-Ga_&eRH$!KTAr-#=yslxooE0^7*Z*5C`y;n2MW%U|y}SH>fqXjt z^{`Q1=ka-Fw?6Ys3$XP&?0H=|tRE0r4=OS-&-6W@)b_Z1UhkF9r|bID-KyMv`96Ld zwxq)Le6BFJ7$DMoMasWiF4JE_;q(POkn9qBiX-~S2dyu=Rx literal 0 HcmV?d00001 diff --git a/TMP/Practice/trash/app_poll2 b/TMP/Practice/trash/app_poll2 new file mode 100755 index 0000000000000000000000000000000000000000..651af046c79696e31f555dd9e83b7ebe8672b83c GIT binary patch literal 16944 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 x`t=L5_XDLzeXc)`zjS?Y-KC*E)YFX#X_HIH +#include +#include +#include +#include +#include +#include +#include +#include +#define DATA 20 +#define NUM 4 + +struct Data { + char s[DATA + 1]; + pid_t cpid; + unsigned char i, t; +}; + +int main(int argc, char *argv[]){ + int pipefd[4][2]; + pid_t cpid[4]; + unsigned char i, tt; + int rr, wt; + +if (argc != 2){ + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); +} + +srand(time(NULL)); + +for(i = 0; i < NUM; i++){ + if (pipe(pipefd[i]) == -1){ + perror("Pipe"); + exit(EXIT_FAILURE); + } + tt = (unsigned char)rand()%8; + dprintf(STDOUT_FILENO, "Time[%X]\n", tt); + + cpid[i] = fork(); + if (cpid[i] == -1){ + perror("Fork"); + exit(EXIT_FAILURE); + } + + if (cpid[i] == 0){ + struct Data data; + close(pipefd[i][0]); + for(int j = 0; j < i; j++){ + close(pipefd[j][0]); + close(pipefd[j][1]); + } + data.cpid = getpid(); + data.i = i; + data.t = tt; + strncpy(data.s, argv[1], DATA); + write(pipefd[i][1], &data, sizeof(struct Data)); + close(pipefd[i][1]); + sleep(tt); + _exit(EXIT_FAILURE); + } else { + dprintf(STDOUT_FILENO, "Start [%d]\n", cpid[i]); + close(pipefd[i][1]); + } +} + +printf("Waiting...\n"); + +while((wt = waitpid(-1, NULL, WNOHANG)) > -1){ + if (wt > 0) for(i = 0; i < NUM; i++){ + if (cpid[i] == wt){ + struct Data data; + while((rr = read(pipefd[i][0], &data, sizeof(struct Data))) > 0){ + dprintf(STDOUT_FILENO, "[%d] num = %d, time = %d [%s]\n", data.cpid, data.i, data.t, data.s); + } + if (rr == 0) close(pipefd[i][0]); + } + } + usleep(3000000); +} +if (errno == ECHILD) + perror("Finish:"); +else + perror("Wait error:"); + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/TMP/Practice/trash/done b/TMP/Practice/trash/done new file mode 100644 index 0000000..7e045a0 --- /dev/null +++ b/TMP/Practice/trash/done @@ -0,0 +1,2 @@ +be be be be +aaaaaaaaaaa \ No newline at end of file diff --git a/TMP/Practice/trash/lect.c b/TMP/Practice/trash/lect.c new file mode 100644 index 0000000..81ed6cd --- /dev/null +++ b/TMP/Practice/trash/lect.c @@ -0,0 +1,24 @@ +#include +#include +#include +#include +#include +#include +#include +#include + + +int main(int argc, char *argv[]){ + int fd_src, fd_dst; + caddr_t addr_src, addr_dst; + struct stat filestat; + fd_src = open(argv[1], O_RDONLY); + fd_dst = open(argv[2], O_RDWR | O_CREAT); + fstat(fd_src, &filestat); + lseek(fd_dst, filestat.st_size - 1, SEEK_SET); + write(fd_dst, "", 1); + addr_src = mmap((caddr_t)0, filestat.st_size, PROT_READ, MAP_SHARED, fd_src, 0); + addr_dst = mmap((caddr_t)0, filestat.st_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd_dst, 0); + memcpy(addr_dst, addr_src, filestat.st_size); + exit(0); +} \ No newline at end of file diff --git a/TMP/Practice/trash/pin.c b/TMP/Practice/trash/pin.c new file mode 100644 index 0000000..f99b0de --- /dev/null +++ b/TMP/Practice/trash/pin.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define NUM 4 + +int main(int argc, char *argv[]){ + int pipefd[4][2]; + pid_t cpid[4]; + unsigned char i, tt; + char buf; + int rr, wt; + +if (argc != 2){ + fprintf(stderr, "Usage: %s \n", argv[0]); + exit(EXIT_FAILURE); +} + +srand(time(NULL)); + +for(i = 0; i < NUM; i++){ + if (pipe(pipefd[i]) == -1){ + perror("Pipe"); + exit(EXIT_FAILURE); + } + tt = (unsigned char)rand()%8; + dprintf(STDOUT_FILENO, "Time[%X]\n", tt); + + cpid[i] = fork(); + if (cpid[i] == -1){ + perror("Fork"); + exit(EXIT_FAILURE); + } + + if (cpid[i] == 0){ + close(pipefd[i][0]); + write(pipefd[i][1], argv[1], strlen(argv[1])); + write(pipefd[i][1], &i, 1); + write(pipefd[i][1], &tt, 1); + close(pipefd[i][1]); + sleep(tt); + _exit(EXIT_FAILURE); + } else { + close(pipefd[i][1]); + } +} + +printf("Waiting...\n"); + +while((wt = waitpid(-1, NULL, WNOHANG)) > -1){ + if (wt > 0) for(i = 0; i < NUM; i++){ + if (cpid[i] == wt){ + while((rr = read(pipefd[i][0], &buf, 1)) > 0){ + write(STDOUT_FILENO, &buf, 1); + dprintf(STDOUT_FILENO, "[%X]", buf); + } + if (rr == 0){ + write(STDOUT_FILENO, "\n", 1); + close(pipefd[i][0]); + } + } + } +} +if (errno == ECHILD) + perror("Finish:"); +else + perror("Wait error:"); + exit(EXIT_SUCCESS); +} \ No newline at end of file diff --git a/TMP/Practice/trash/poll.c b/TMP/Practice/trash/poll.c new file mode 100644 index 0000000..9c8ce94 --- /dev/null +++ b/TMP/Practice/trash/poll.c @@ -0,0 +1,133 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#define NUM 4 +#define errExit(msg) do { perror(msg); _exit(EXIT_FAILURE); } while (0) +#define errExit1(msg) { perror(msg); _exit(EXIT_FAILURE); } + +void child_handler(int sig) { + pid_t pid; + while((pid = waitpid(-1, NULL, WNOHANG)) > 0); +} + +int main(int argc, char *argv[]) { + + struct sigaction new_act, old_act; + sigemptyset (&new_act.sa_mask); + new_act.sa_flags = 0; + new_act.sa_handler = child_handler; + + sigaction (SIGCHLD, &new_act, &old_act); + + int pipefd[NUM][2]; + pid_t cpid[NUM]; + + int nfds, num_open_fds; + struct pollfd *pfds; + int ready; + + unsigned char i,tt; + char buf; + int rr; + + if (argc != 2) { + fprintf(stderr, "Usage: %s \n", argv[0]); + _exit(EXIT_FAILURE); + } + + srand(time(NULL)); + + num_open_fds = nfds = NUM; + pfds = calloc(nfds, sizeof(struct pollfd)); + if (pfds == NULL) errExit("malloc"); + + for (i=0;i 0) { + + do{ + dprintf(STDOUT_FILENO,"\ntry poll:\n"); + for (i = 0; i < NUM; i++) pfds[i].revents=0; + ready = poll(pfds, nfds, -1); + if(ready == -1) + switch (errno) { + case EINTR: dprintf(STDOUT_FILENO,"\nPoll interrupted, repeat.\n"); + continue; + default: errExit("poll"); + } + } while (ready <= 0); + + for (i = 0; i < NUM; i++) { + if (pfds[i].revents != 0) { + dprintf(STDOUT_FILENO," fd=%d; events: %7s%8s%9s%8s%8s ", pfds[i].fd, + (pfds[i].revents & POLLIN) ? "POLLIN " : "", + (pfds[i].revents & POLLHUP) ? "POLLHUP " : "", + (pfds[i].revents & POLLNVAL) ? "POLLNVAL " : "", + (pfds[i].revents & POLLPRI) ? "POLLPRI " : "", + (pfds[i].revents & POLLERR) ? "POLLERR " : ""); + if (pfds[i].revents & POLLIN) { + + do { + rr=read(pfds[i].fd, &buf, 1); + if (rr < 0) + switch (errno) { + case EINTR: dprintf(STDOUT_FILENO,"\nRead interrupted, repeat.\n"); + continue; + default: errExit("read"); + } + if(rr == 0 ) + dprintf(STDOUT_FILENO,"\n"); + else + dprintf(STDOUT_FILENO,"[%2X]",buf); + } while (rr > 0); + + } + else + if ((pfds[i].revents & (POLLHUP | ~POLLIN))) { + dprintf(STDOUT_FILENO,"Closing [%d], pipefd %d, pfds.fd %d\n",i,pipefd[i][0],pfds[i].fd); + if (close(pfds[i].fd) < 0 ) errExit("close pfds"); + pfds[i].fd = -1; + pfds[i].events=0; + num_open_fds--; + dprintf(STDOUT_FILENO,"Still opened fds %d\n",num_open_fds); + } + } + } + } + + return EXIT_SUCCESS; +} diff --git a/TMP/Practice/trash/poll2.c b/TMP/Practice/trash/poll2.c new file mode 100644 index 0000000..660a080 --- /dev/null +++ b/TMP/Practice/trash/poll2.c @@ -0,0 +1,142 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define NUM 4 +#define errExit(msg) do { perror(msg); _exit(EXIT_FAILURE); } while (0) +#define errExit1(msg) { perror(msg); _exit(EXIT_FAILURE); } + +struct Child { +unsigned char lifetime; +char* message; +}; + +void child_handler(int sig) { +pid_t pid; +while((pid = waitpid(-1, NULL, WNOHANG)) > 0); +} + +int main(int argc, char *argv[]) { + +struct sigaction new_act, old_act; +sigemptyset (&new_act.sa_mask); +new_act.sa_flags = 0; +new_act.sa_handler = child_handler; + +sigaction (SIGCHLD, &new_act, &old_act); + +int pipefd[NUM][2]; +pid_t cpid[NUM]; + +int nfds, num_open_fds; +struct pollfd *pfds; +int ready; + +unsigned char i,tt; +char buf; +int rr; + +struct Child children[NUM]; + +if (argc != 2) { +fprintf(stderr, "Usage: %s \n", argv[0]); +_exit(EXIT_FAILURE); +} + +srand(time(NULL)); + +num_open_fds = nfds = NUM; +pfds = calloc(nfds, sizeof(struct pollfd)); +if (pfds == NULL) errExit("malloc"); + +for (i=0;i 0) { + +do{ +dprintf(STDOUT_FILENO,"\ntry poll:\n"); +for (i = 0; i < NUM; i++) pfds[i].revents=0; +ready = poll(pfds, nfds, -1); +if(ready == -1) +switch (errno) { +case EINTR: dprintf(STDOUT_FILENO,"\nPoll interrupted, repeat.\n"); +continue; +default: errExit("poll"); +} +} while (ready <= 0); + +for (i = 0; i < NUM; i++) { +if (pfds[i].revents != 0) { +dprintf(STDOUT_FILENO," fd=%d; events: %7s%8s%9s%8s%8s ", pfds[i].fd, +(pfds[i].revents & POLLIN) ? "POLLIN " : "", +(pfds[i].revents & POLLHUP) ? "POLLHUP " : "", +(pfds[i].revents & POLLNVAL) ? "POLLNVAL " : "", +(pfds[i].revents & POLLPRI) ? "POLLPRI " : "", +(pfds[i].revents & POLLERR) ? "POLLERR " : ""); +if (pfds[i].revents & POLLIN) { + +do { +rr=read(pfds[i].fd, &buf, 1); +if (rr < 0) +switch (errno) { +case EINTR: dprintf(STDOUT_FILENO,"\nRead interrupted, repeat.\n"); +continue; +default: errExit("read"); +} +if(rr == 0 ) +dprintf(STDOUT_FILENO,"\n"); +else +dprintf(STDOUT_FILENO,"[%2X]",buf); +} while (rr > 0); + +} +else +if ((pfds[i].revents & (POLLHUP | ~POLLIN))) { +dprintf(STDOUT_FILENO,"Closing [%d], pipefd %d, pfds.fd %d\n",i,pipefd[i][0],pfds[i].fd); +if (close(pfds[i].fd) < 0 ) errExit("close pfds"); +pfds[i].fd = -1; +pfds[i].events=0; +num_open_fds--; +dprintf(STDOUT_FILENO,"Still opened fds %d\n",num_open_fds); +} +} +} +} + +return EXIT_SUCCESS; +} \ No newline at end of file diff --git a/TMP/Practice/trash/prog1 b/TMP/Practice/trash/prog1 new file mode 100644 index 0000000..42d46a3 --- /dev/null +++ b/TMP/Practice/trash/prog1 @@ -0,0 +1,37 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +int mtx(int *m, int s){ + srand(time(NULL)); + for(int i = 0; i < s; i++) + *m++ = rand()%0xffff; + return 0; +} + +int main(int argc, char *argv[]){ + int fd; + int n,s; + size_t ms; + int *m; + int *fa; + + if (argc < 3){ + printf("Usage: a.out size filename\n"); + } + s = n*n; + ms = s*sizeof(int); + + if((fd = open(argv[2], O_RDWR | O_CREAT | O_TRUNC, 0664)) == -1){ + perror("open: "); + exit(errno); + + } +} \ No newline at end of file diff --git a/TMP/Practice/trash/text b/TMP/Practice/trash/text new file mode 100644 index 0000000..7e045a0 --- /dev/null +++ b/TMP/Practice/trash/text @@ -0,0 +1,2 @@ +be be be be +aaaaaaaaaaa \ No newline at end of file