#include #include #include #include #include #include #define CHLDMAX 4 int main(int argc, char *argv[]) { char c, buf[2]; int status, nchlds=0; pid_t pid; if (argc != 2) { fprintf(stderr, "usage: %s DIFFICULTY\n", *argv); exit(1); } for (c='a'; ; c++) { if (c > 'z') { c = 'a'; } if (nchlds == CHLDMAX) { wait(&status); nchlds--; if (WIFEXITED(status) && WEXITSTATUS(status)==0) { /* our work is done */ break; } } fflush(stdout); pid = fork(); nchlds++; if (pid == -1) { perror("fork"); exit(1); } if (pid == 0) { /* child */ srand(getpid()); buf[0] = c; buf[1] = '\0'; execl("miner", "miner", argv[1], buf, (char *)NULL); perror("exec"); exit(1); } } while (wait(&status) != -1) { continue; } return 0; }