#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; }