Summary Files Commits Branches @commit @diff @stats
path: root / Year 3 / System programming / Practice06
diff options
context:
space:
mode:
Commita607349b22f8a201512582e6341fe020527baf62 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-12-02 21:48:54 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-12-02 21:48:54 +0200
Files603967786be72bab304a42122112a90f16c20c81 /Year 3/System programming/Practice06
uni-projects-a607349b22f8a201512582e6341fe020527baf62.tar
uni-projects-a607349b22f8a201512582e6341fe020527baf62.tar.gz
uni-projects-a607349b22f8a201512582e6341fe020527baf62.zip
Parent3c791c6c357115d4abf71c318c9e7cd7571ea658 (diff)
[SP/P06] Solved most exercises
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);
+ }
+}