diff --git a/ANALE-1/EXO3/RESOLUTION/a.out b/ANALE-1/EXO3/RESOLUTION/a.out new file mode 100755 index 0000000..60b7cea Binary files /dev/null and b/ANALE-1/EXO3/RESOLUTION/a.out differ diff --git a/ANALE-1/EXO3/RESOLUTION/pipeline b/ANALE-1/EXO3/RESOLUTION/pipeline new file mode 100755 index 0000000..e87aecf Binary files /dev/null and b/ANALE-1/EXO3/RESOLUTION/pipeline differ diff --git a/ANALE-1/EXO3/RESOLUTION/pipeline.c b/ANALE-1/EXO3/RESOLUTION/pipeline.c new file mode 100644 index 0000000..6fef88e --- /dev/null +++ b/ANALE-1/EXO3/RESOLUTION/pipeline.c @@ -0,0 +1,83 @@ +// pipeline.c +#include +#include +#include +#include +#include + +int main(void) { + int tube1[2],tube2[2]; + int res1 = pipe(tube1); + if (res1 == -1){ + perror("Création Pipe 1"); exit(-1); + } + int res2 = pipe(tube2); + if (res2 == -1){ + perror("Création Pipe 1"); exit(-1); + } + + // --- CUT --- + pid_t pid_cut = fork(); + if (pid_cut == -1) { perror("fork cut"); exit(EXIT_FAILURE); } + if (pid_cut == 0) { + close(tube1[1]); + close(tube2[0]); + if (dup2(tube1[0], STDIN_FILENO) == -1) { perror("dup2 cut in"); _exit(1); } + if (dup2(tube2[1], STDOUT_FILENO) == -1) { perror("dup2 cut out"); _exit(1); } + close(tube1[0]); + close(tube2[1]); + execlp("cut", "cut", "-d,", "-f3", NULL); + perror("execlp cut"); + _exit(127); + } + + + // SORT + pid_t pid_sort = fork(); + if (pid_sort == -1) { perror("fork sort"); exit(EXIT_FAILURE); } + if (pid_sort == 0) { + close(tube1[0]); close(tube1[1]); + close(tube2[1]); + if (dup2(tube2[0], STDIN_FILENO) == -1) { perror("dup2 sort in"); _exit(1); } + close(tube2[0]); + + int fd = open("sortie", O_CREAT | O_WRONLY | O_TRUNC, 0644); + if (fd == -1) { perror("open sortie"); _exit(1); } + if (dup2(fd, STDOUT_FILENO) == -1) { perror("dup2 sortie"); _exit(1); } + close(fd); + + execlp("sort", "sort", NULL); + perror("execlp sort"); + _exit(127); + } + + // --- GREP --- + pid_t pid_grep = fork(); + if (pid_grep == -1) { perror("fork grep"); exit(EXIT_FAILURE); } + if (pid_grep == 0) { + close(tube2[0]); close(tube2[1]); + close(tube1[0]); + + int fd = open("server.log", O_RDONLY); + if (fd == -1) { perror("open server.log"); _exit(1); } + if (dup2(fd, STDIN_FILENO) == -1) { perror("dup2 grep in"); _exit(1); } + close(fd); + + if (dup2(tube1[1], STDOUT_FILENO) == -1) { perror("dup2 grep out"); _exit(1); } + close(tube1[1]); + + execlp("grep", "grep", "invalid credentials", NULL); + perror("execlp grep"); + _exit(127); + } + + // Parent + close(tube1[0]); close(tube1[1]); + close(tube2[0]); close(tube2[1]); + + int status; + waitpid(pid_grep, &status, 0); + waitpid(pid_cut, &status, 0); + waitpid(pid_sort, &status, 0); + return 0; +} \ No newline at end of file diff --git a/ANALE-1/EXO3/SUJET/sortie b/ANALE-1/EXO3/SUJET/sortie new file mode 100644 index 0000000..16b9da6 --- /dev/null +++ b/ANALE-1/EXO3/SUJET/sortie @@ -0,0 +1,66 @@ +user_id: 1000 +user_id: 1001 +user_id: 1002 +user_id: 1002 +user_id: 1002 +user_id: 1006 +user_id: 1006 +user_id: 1007 +user_id: 1010 +user_id: 1011 +user_id: 1011 +user_id: 1011 +user_id: 1012 +user_id: 1014 +user_id: 1019 +user_id: 1021 +user_id: 1022 +user_id: 1023 +user_id: 1025 +user_id: 1025 +user_id: 1027 +user_id: 1028 +user_id: 1030 +user_id: 1031 +user_id: 1032 +user_id: 1034 +user_id: 1034 +user_id: 1035 +user_id: 1036 +user_id: 1037 +user_id: 1038 +user_id: 1038 +user_id: 1039 +user_id: 1039 +user_id: 1043 +user_id: 1043 +user_id: 1047 +user_id: 1050 +user_id: 1054 +user_id: 1058 +user_id: 1064 +user_id: 1064 +user_id: 1064 +user_id: 1066 +user_id: 1066 +user_id: 1066 +user_id: 1069 +user_id: 1070 +user_id: 1071 +user_id: 1074 +user_id: 1074 +user_id: 1076 +user_id: 1078 +user_id: 1078 +user_id: 1079 +user_id: 1080 +user_id: 1081 +user_id: 1081 +user_id: 1084 +user_id: 1087 +user_id: 1093 +user_id: 1094 +user_id: 1094 +user_id: 1096 +user_id: 1096 +user_id: 1097