Summary Files Commits Branches @commit @diff @stats
path: root / Year 3 / System programming / Practicum6 / ex5.c
diff options
context:
space:
mode:
Commit369a723ba50fc9520b30f4d18cdb347f8b9496ee (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-11-15 11:58:16 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-11-15 11:58:16 +0200
Filese6a765914bc482d694f8a7c79411e7ef28eec8f2 /Year 3/System programming/Practicum6/ex5.c
uni-projects-369a723ba50fc9520b30f4d18cdb347f8b9496ee.tar
uni-projects-369a723ba50fc9520b30f4d18cdb347f8b9496ee.tar.gz
uni-projects-369a723ba50fc9520b30f4d18cdb347f8b9496ee.zip
Parentfd31939b2f94f4d64a5a6d5d7cb84b925b778166 (diff)
[SP/P6] Solved exercises
1 files changed, 40 insertions, 0 deletions
-rw-r--r--Year 3/System programming/Practicum6/ex5.c40
diff --git a/Year 3/System programming/Practicum6/ex5.c b/Year 3/System programming/Practicum6/ex5.c
new file mode 100644
index 0000000..903732d
--- /dev/null
+++ b/Year 3/System programming/Practicum6/ex5.c
@@ -0,0 +1,40 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+int main(int argc, char* argv[]) {
+ int pf[2];
+ pipe(pf);
+ int f = fork();
+ if (f == 0) { // child
+ if (close(pf[0]) < 0) {
+ perror("close");
+ return 1;
+ }
+ dup2(pf[1], 1);
+ if (close(pf[1]) < 0) {
+ perror("close");
+ return 2;
+ }
+
+ execlp(argv[1], argv[1], (char*)NULL);
+ }
+ else {
+ if (close(pf[1]) < 0) {
+ perror("close");
+ return 3;
+ }
+ dup2(pf[0], 0);
+ if (close(pf[0]) < 0) {
+ perror("close");
+ return 4;
+ }
+
+ int status;
+ wait(&status);
+
+ execlp(argv[2], argv[2], (char*)NULL);
+ }
+ return 0;
+}