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