diff options
| Commit | 2f8550db96c6d6cb0cb5fe7b448f832a62dcc297 (patch) | |
|---|---|---|
| Author | 2024-01-19 13:36:34 +0200 | |
| Committer | 2024-01-19 13:36:34 +0200 | |
| Files | e53fb9f626cd84694d96fc27b2830726201f5d83 | |
| uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.tar uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.tar.gz uni-projects-2f8550db96c6d6cb0cb5fe7b448f832a62dcc297.zip | ||
| Parent | 935c660155135865ca10c21e0cc7564c83f9267e (diff) | |
[SP/P08] Solved exercises
6 files changed, 138 insertions, 0 deletions
| -rw-r--r-- | Year 3/System programming/Practice08/ex1.c | 16 | ||||
| -rw-r--r-- | Year 3/System programming/Practice08/ex2.c | 20 | ||||
| -rw-r--r-- | Year 3/System programming/Practice08/ex3.c | 23 | ||||
| -rw-r--r-- | Year 3/System programming/Practice08/ex4.c | 19 | ||||
| -rw-r--r-- | Year 3/System programming/Practice08/ex5.c | 26 | ||||
| -rw-r--r-- | Year 3/System programming/Practice08/ex6.c | 34 |
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; +} |
