From 65bdc35e6f82ba0fa0259166005263a1fc9795c9 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Wed, 25 Oct 2023 11:02:02 +0300 Subject: [SP/P4] Solved all exercises --- Year 3/System programming/Practicum4/ex1.c | 11 +++++++++++ Year 3/System programming/Practicum4/ex2.c | 18 ++++++++++++++++++ Year 3/System programming/Practicum4/ex3.c | 13 +++++++++++++ Year 3/System programming/Practicum4/ex4.c | 22 ++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 Year 3/System programming/Practicum4/ex1.c create mode 100644 Year 3/System programming/Practicum4/ex2.c create mode 100644 Year 3/System programming/Practicum4/ex3.c create mode 100644 Year 3/System programming/Practicum4/ex4.c (limited to 'Year 3/System programming/Practicum4') diff --git a/Year 3/System programming/Practicum4/ex1.c b/Year 3/System programming/Practicum4/ex1.c new file mode 100644 index 0000000..7958de4 --- /dev/null +++ b/Year 3/System programming/Practicum4/ex1.c @@ -0,0 +1,11 @@ +#include +#include +#include + +int main() { + pid_t pid = getpid(); + pid_t parentPID = getppid(); + + printf("Current: %d\nParent: %d\n", pid, parentPID); + execlp("ps", "ps", (char*)NULL); +} diff --git a/Year 3/System programming/Practicum4/ex2.c b/Year 3/System programming/Practicum4/ex2.c new file mode 100644 index 0000000..579b247 --- /dev/null +++ b/Year 3/System programming/Practicum4/ex2.c @@ -0,0 +1,18 @@ +#include +#include +#include +#include + +int main() { + pid_t pid = getpid(); + pid_t fpid = fork(); + printf("own: %d\nfork: %d\n", pid, fpid); + if (fpid == 0) { + printf("parent: %d\n", getppid()); + } + else if (fpid > 0) { + int childStatus; + wait(&childStatus); + printf("child exit status: %d\n", childStatus); + } +} diff --git a/Year 3/System programming/Practicum4/ex3.c b/Year 3/System programming/Practicum4/ex3.c new file mode 100644 index 0000000..8df352b --- /dev/null +++ b/Year 3/System programming/Practicum4/ex3.c @@ -0,0 +1,13 @@ +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int status = -1; + int fpid = fork(); + if (fpid == 0) + execl(argv[1], argv[1], (char*)NULL); + wait(&status); + printf("Exit status: %d\n", status); +} diff --git a/Year 3/System programming/Practicum4/ex4.c b/Year 3/System programming/Practicum4/ex4.c new file mode 100644 index 0000000..3492784 --- /dev/null +++ b/Year 3/System programming/Practicum4/ex4.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include + +int main(int argc, char *argv[]) { + int f1 = fork(); + int f2 = fork(); + if (f1 == 0) { + execlp(argv[1], argv[1], (char*)NULL); + } + else if (f2 == 0) { + execlp(argv[2], argv[2], (char*)NULL); + } + else { + int firstStatus, secondStatus; + int firstEnded = wait(&firstStatus); + int secondEnded = wait(&secondStatus); + printf("%s %d\n", argv[1 + (firstEnded != f1)], firstStatus); + printf("%s %d\n", argv[1 + (secondEnded != f1)], secondStatus); + } +} -- cgit v1.3.1-26-gb76a