diff --git a/SCR3.1/TP3/ex5_v2.c b/SCR3.1/TP3/ex5_v2.c index 583568c..ac1d641 100644 --- a/SCR3.1/TP3/ex5_v2.c +++ b/SCR3.1/TP3/ex5_v2.c @@ -10,20 +10,33 @@ int search(const unsigned char * t,int start,int end, int n) { pid_t p; - int i, proc, status, partition = ceil((start + end) / n); + int i, proc, res = 0, status, partition = ceil((start + end) / n); for (proc = 1; proc <= n;proc++){ p = fork(); if (p == 0){ - for (i = 0 + partition * proc + for (i = 0 + partition * proc; i < partition * (proc + 1); i++){ + if (t[i] == 0) + exit(1); + } + exit(0); } + } + for (i = 0; i < n; i++){ + wait(&status); + if (WEXITSTATUS(status)) + res = 1; + } + return res; } int main(int argc , char * argv[]) { int i, n; unsigned char arr[SIZE]; - if (argc != 2) + if (argc != 2){ printf("Usage : %s ", argv[0]); + return EXIT_FAILURE; + } n = (int) strtod(argv[1], NULL); srandom(time(NULL)); diff --git a/SCR3.1/TP3/ex5_v3.c b/SCR3.1/TP3/ex5_v3.c new file mode 100644 index 0000000..f84dd88 --- /dev/null +++ b/SCR3.1/TP3/ex5_v3.c @@ -0,0 +1,61 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +#define SIZE 1000 +int search(const unsigned char * t,int start,int end, int n) +{ + pid_t p; + int i, proc, res = 0, status, partition = ceil((start + end) / n); + for (proc = 1; proc <= n;proc++){ + p = fork(); + if (p == 0){ + for (i = 0 + partition * proc; i < partition * (proc + 1); i++){ + if (t[i] == 0){ + exit(1); + kill(0, SIGTERM); + } + } + exit(0); + } + } + for (i = 0; i < n; i++){ + wait(&status); + if (WEXITSTATUS(status)) + res = 1; + } + return res; +} + +int main(int argc , char * argv[]) +{ + int i, n; + unsigned char arr[SIZE]; + if (argc != 2){ + printf("Usage : %s \n", argv[0]); + return EXIT_FAILURE; + } + + n = (int) strtod(argv[1], NULL); + srandom(time(NULL)); + + for (i = 0; i < SIZE; i++) + arr[i] = (unsigned char) (random() % 255) + 1; + + printf("Enter a number between 0 and %d: ", SIZE); + scanf(" %d", &i); + if (i >= 0 && i < SIZE) arr[i] = 0; + + if (search(arr,0,SIZE-1, n)) + printf("Found !\n"); + else + printf("Not found !\n"); + return EXIT_SUCCESS; +} + +