diff options
[SP/P6] Solved exercises
1 files changed, 40 insertions, 0 deletions
| -rw-r--r-- | Year 3/System programming/Practicum6/ex5.c | 40 |
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; +} |
