Summary Files Commits Branches @commit @diff @stats
diff options
context:
space:
mode:
Commit2f8550db96c6d6cb0cb5fe7b448f832a62dcc297 (patch)
Author
 Syndamia <kamen@syndamia.com>
2024-01-19 13:36:34 +0200
Committer
 Syndamia <kamen@syndamia.com>
2024-01-19 13:36:34 +0200
Filese53fb9f626cd84694d96fc27b2830726201f5d83
uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.tar
uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.tar.gz
uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.zip
Parent935c660155135865ca10c21e0cc7564c83f9267e (diff)
[SP/P08] Solved exercises
diff --git a/Year 3/System programming/Practice08/ex1.c b/Year 3/System programming/Practice08/ex1.c
new file mode 100644
index 0000000..63ee62e
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex1.c
@@ -0,0 +1,16 @@
+#include <signal.h>
+#include <stdio.h>
+#include <unistd.h>
+
+int main() {
+ signal(SIGPIPE, SIG_IGN);
+
+ int filedes[2];
+ pipe(filedes);
+ close(filedes[0]);
+
+ write(filedes[1], "aba\n", 4);
+ write(1, "mnm\n", 4);
+
+ return 0;
+}
diff --git a/Year 3/System programming/Practice08/ex2.c b/Year 3/System programming/Practice08/ex2.c
new file mode 100644
index 0000000..c8e783e
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex2.c
@@ -0,0 +1,20 @@
+#include <signal.h>
+#include <stdio.h>
+#include <unistd.h>
+
+void sigpipeHandle(int a) {
+ printf("handler\n");
+}
+
+int main() {
+ signal(SIGPIPE, sigpipeHandle);
+
+ int filedes[2];
+ pipe(filedes);
+ close(filedes[0]);
+
+ write(filedes[1], "aba\n", 4);
+ write(1, "mnm\n", 4);
+
+ return 0;
+}
diff --git a/Year 3/System programming/Practice08/ex3.c b/Year 3/System programming/Practice08/ex3.c
new file mode 100644
index 0000000..6dafe40
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex3.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+void usr1Handler(int a) {
+}
+
+int main() {
+ signal(SIGUSR1, &usr1Handler);
+
+ int fp = fork();
+ if (fp == 0) { // child
+ printf("child\n");
+ kill(getppid(), SIGUSR1);
+ }
+ else {
+ pause();
+ printf("child finished\n");
+ }
+
+ return 0;
+}
diff --git a/Year 3/System programming/Practice08/ex4.c b/Year 3/System programming/Practice08/ex4.c
new file mode 100644
index 0000000..882282b
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex4.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+int counter = 0;
+
+void sigalarmHandler(int a) {
+ printf("%d\n", counter);
+ alarm(1);
+}
+
+int main() {
+ signal(SIGALRM, &sigalarmHandler);
+ alarm(1);
+ while (1) counter++;
+
+ return 0;
+}
diff --git a/Year 3/System programming/Practice08/ex5.c b/Year 3/System programming/Practice08/ex5.c
new file mode 100644
index 0000000..fa5f648
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex5.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+int counter = 0;
+
+void sigalarmHandler(int a) {
+ printf("%d\n", counter);
+ alarm(1);
+}
+
+void sigintHandler(int a) {
+ printf("int\n");
+ counter = 0;
+}
+
+int main() {
+ signal(SIGALRM, &sigalarmHandler);
+ signal(SIGINT, &sigintHandler);
+
+ alarm(1);
+ while (1) counter++;
+
+ return 0;
+}
diff --git a/Year 3/System programming/Practice08/ex6.c b/Year 3/System programming/Practice08/ex6.c
new file mode 100644
index 0000000..ed46f66
--- /dev/null
+++ b/Year 3/System programming/Practice08/ex6.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <signal.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/wait.h>
+
+void termHandler(int a) {
+ printf("childterm\n");
+}
+
+int fp = 0;
+
+void alarmHandler(int a) {
+ kill(fp, SIGTERM);
+}
+
+int main() {
+ signal(SIGTERM, &termHandler);
+ signal(SIGALRM, &alarmHandler);
+
+ fp = fork();
+ if (fp == 0) { // child
+ pause();
+ pause();
+ }
+ else {
+ alarm(1);
+ pause();
+ alarm(1);
+ wait(NULL);
+ }
+
+ return 0;
+}