diff options
| Commit | 952bee4ac4e4a97d30fc1d681ff0a9e5168fb9c8 (patch) | |
|---|---|---|
| Author | 2023-12-02 20:19:43 +0200 | |
| Committer | 2023-12-02 20:19:43 +0200 | |
| Files | 673b8d043ed10194694131eeb2948fe4ff94bfac | |
| uni-projects-952bee4ac4e4a97d30fc1d681ff0a9e5168fb9c8.tar uni-projects-952bee4ac4e4a97d30fc1d681ff0a9e5168fb9c8.tar.gz uni-projects-952bee4ac4e4a97d30fc1d681ff0a9e5168fb9c8.zip | ||
| Parent | b50c86bd91351bfde316a4aa6e06e95588e4553f (diff) | |
[SP/P04] Solved exercises
4 files changed, 69 insertions, 0 deletions
| -rw-r--r-- | Year 3/System programming/Practice04/ex1.c | 12 | ||||
| -rw-r--r-- | Year 3/System programming/Practice04/ex2.c | 19 | ||||
| -rw-r--r-- | Year 3/System programming/Practice04/ex3.c | 16 | ||||
| -rw-r--r-- | Year 3/System programming/Practice04/ex4.c | 22 |
diff --git a/Year 3/System programming/Practice04/ex1.c b/Year 3/System programming/Practice04/ex1.c new file mode 100644 index 0000000..da92ec6 --- /dev/null +++ b/Year 3/System programming/Practice04/ex1.c @@ -0,0 +1,12 @@ +#include <stdio.h> // printf, perror +#include <unistd.h> // getpid, getppid, execlp +#include <sys/types.h> // pid_t +int main(int argc, char* argv[]) { + pid_t pid = getpid(); + pid_t parent = getppid(); + printf("%d %d\n", pid, parent); + if (execlp("ps", "ps", (char*)NULL) < 0) { + perror("execlp"); + return 1; + } +} diff --git a/Year 3/System programming/Practice04/ex2.c b/Year 3/System programming/Practice04/ex2.c new file mode 100644 index 0000000..21f5f0e --- /dev/null +++ b/Year 3/System programming/Practice04/ex2.c @@ -0,0 +1,19 @@ +#include <sys/wait.h> // wait +#include <sys/types.h> // pid_t +#include <stdio.h> // printf +#include <unistd.h> // getpid, getppid, fork + +int main(int argc, char* argv[]) { + printf("%d\n", getpid()); + + pid_t f = fork(); + printf("%d %d\n", f, getpid()); + if (f == 0) { // in child + printf("Parent: %d\n", getppid()); + } + else { + int status; + wait(&status); + printf("Child exit status: %d\n", status); + } +} diff --git a/Year 3/System programming/Practice04/ex3.c b/Year 3/System programming/Practice04/ex3.c new file mode 100644 index 0000000..dc32819 --- /dev/null +++ b/Year 3/System programming/Practice04/ex3.c @@ -0,0 +1,16 @@ +#include <unistd.h> // fork, execl +#include <sys/wait.h> // wait +#include <sys/types.h> // pid_t +#include <stdio.h> // printf + +int main(int argc, char* argv[]) { + pid_t f = fork(); + if (f == 0) { // in child + execl(argv[1], argv[1], (char*)NULL); + } + else { + int status; + wait(&status); + printf("Exit status: %d\n", status); + } +} diff --git a/Year 3/System programming/Practice04/ex4.c b/Year 3/System programming/Practice04/ex4.c new file mode 100644 index 0000000..1014f5c --- /dev/null +++ b/Year 3/System programming/Practice04/ex4.c @@ -0,0 +1,22 @@ +#include <unistd.h> // fork, execlp +#include <sys/types.h> // pid_t +#include <sys/wait.h> // wait +#include <stdio.h> // printf + +int main(int argc, char* argv[]) { + pid_t fork1 = fork(); + pid_t fork2 = fork(); + if (fork1 == 0) { // in child 1 + execlp(argv[1], argv[1], (char*)NULL); + } + else if (fork2 == 0) { // in child 2 + execlp(argv[2], argv[2], (char*)NULL); + } + else { + int firstStatus, secondStatus; + pid_t firstPID = wait(&firstStatus); + pid_t secondPID = wait(&secondStatus); + printf("%s %d\n", argv[1 + (firstPID != fork1)], firstStatus); + printf("%s %d\n", argv[1 + (secondPID != fork1)], secondStatus); + } +} |
