prime sieve
prime sieve program for xv6 using pipesc_cpp
a month ago
1.0 kB
1
Indexable
Never
#include "kernel/types.h" #include "user/user.h" void gen(int p[2]) { close(p[0]); for (int i = 2; i <= 35; i++) { if (write(p[1], &i, sizeof(int)) < 0) exit(1); } close(p[1]); exit(0); } void solve(int *left) { int prime; int ret = read(*left, &prime, 4); if (ret == 0) exit(0); if (ret > 0) fprintf(1, "prime %d\n", prime); int p[2]; pipe(p); if (fork() == 0) { close(p[1]); solve(p); close(p[0]); exit(0); } close(p[0]); int num; while (read(*left, &num, 4) > 0) { if (num % prime) { write(p[1], &num, 4); } } close(p[1]); wait(0); } int main() { int p[2]; pipe(p); if (fork() == 0) gen(p); close(p[1]); wait(0); if (fork() == 0) solve(p); close(p[0]); wait(0); exit(0); }