diff options
| Commit | a607349b22f8a201512582e6341fe020527baf62 (patch) | |
|---|---|---|
| Author | 2023-12-02 21:48:54 +0200 | |
| Committer | 2023-12-02 21:48:54 +0200 | |
| Files | 603967786be72bab304a42122112a90f16c20c81 | |
| uni-projects-a607349b22f8a201512582e6341fe020527baf62.tar uni-projects-a607349b22f8a201512582e6341fe020527baf62.tar.gz uni-projects-a607349b22f8a201512582e6341fe020527baf62.zip | ||
| Parent | 3c791c6c357115d4abf71c318c9e7cd7571ea658 (diff) | |
[SP/P06] Solved most exercises
4 files changed, 80 insertions, 0 deletions
| -rw-r--r-- | Year 3/System programming/Practice06/ex1.c | 14 | ||||
| -rw-r--r-- | Year 3/System programming/Practice06/ex2.c | 14 | ||||
| -rw-r--r-- | Year 3/System programming/Practice06/ex3.c | 16 | ||||
| -rw-r--r-- | Year 3/System programming/Practice06/ex4.c | 36 |
diff --git a/Year 3/System programming/Practice06/ex1.c b/Year 3/System programming/Practice06/ex1.c new file mode 100644 index 0000000..bcb22d5 --- /dev/null +++ b/Year 3/System programming/Practice06/ex1.c @@ -0,0 +1,14 @@ +#include <unistd.h> // pipe +#include <stdio.h> + +int main(int argc, char* argv[]) { + int filedes[2]; + if (pipe(filedes) < 0) { + perror("pipe"); + return 1; + } + + close(filedes[1]); + char buf; + read(filedes[1], &buf, 1); +} diff --git a/Year 3/System programming/Practice06/ex2.c b/Year 3/System programming/Practice06/ex2.c new file mode 100644 index 0000000..83749e1 --- /dev/null +++ b/Year 3/System programming/Practice06/ex2.c @@ -0,0 +1,14 @@ +#include <unistd.h> // pipe +#include <stdio.h> + +int main(int argc, char* argv[]) { + int filedes[2]; + if (pipe(filedes) < 0) { + perror("pipe"); + return 1; + } + + close(filedes[0]); + char buf = 'a'; + write(filedes[1], &buf, 1); +} diff --git a/Year 3/System programming/Practice06/ex3.c b/Year 3/System programming/Practice06/ex3.c new file mode 100644 index 0000000..a1ef2e2 --- /dev/null +++ b/Year 3/System programming/Practice06/ex3.c @@ -0,0 +1,16 @@ +#include <unistd.h> // pipe +#include <stdio.h> + +int main(int argc, char* argv[]) { + int filedes[2]; + if (pipe(filedes) < 0) { + perror("pipe"); + return 1; + } + + char buf = 'a'; + write(filedes[0], &buf, 1); + char bufin; + read(filedes[1], &bufin, 1); + printf("%c\n", bufin); +} diff --git a/Year 3/System programming/Practice06/ex4.c b/Year 3/System programming/Practice06/ex4.c new file mode 100644 index 0000000..c499cb3 --- /dev/null +++ b/Year 3/System programming/Practice06/ex4.c @@ -0,0 +1,36 @@ +#include <unistd.h> // pipe +#include <stdio.h> +#include <string.h> +#include <sys/types.h> +#include <sys/wait.h> + +int main(int argc, char* argv[]) { + int filedes[2]; + if (pipe(filedes) < 0) { + perror("pipe"); + return 1; + } + + pid_t fpid = fork(); + if (fpid == 0) { + close(filedes[1]); + char buf[1024]; + int count = 2; + while (count < argc) { + read(filedes[0], buf, 1024); + if (buf[0] != '\0') { + printf("%s\n", buf); + count++; + // TODO: изчистване на buf + } + } + } + else { + close(filedes[0]); + for (int i = 1; i < argc; i++) { + write(filedes[1], argv[i], strlen(argv[i])); + sleep(1); + } + wait(NULL); + } +} |
