prime sieve
prime sieve program for xv6 using pipesunknown
c_cpp
2 years ago
1.0 kB
8
Indexable
#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);
}
Editor is loading...