#include"kernel/types.h"
#include"kernel/stat.h"
#include"user/user.h"
void function(int pipe1[2]){
int num; // number passed in function
read(pipe1[0], &num, sizeof(num)); // read the first number in the pipe
if(num == -1){ // recursion exit condition
exit(0);
}
printf("prime %d\n", num); // output a prime number
int pipe2[2];
pipe(pipe2);
if(fork() == 0){ // fork and if it is a child process
close(pipe2[1]); // close useless pipe
close(pipe1[0]);
function(pipe2); // recursion
}else{ // parent process
int buf;
while(read(pipe1[0], &buf, sizeof(buf)) && buf != -1){
if (buf % num != 0){ // pass numbers required
write(pipe2[1], &buf, sizeof(buf));
}
}
buf = -1;
write(pipe2[1], &buf, sizeof(buf)); // write end notation
close(pipe1[0]);
wait(0); // wait for child process (form a wait chain)
exit(0);
}
}
int main(int argc, char **argv){
int pipe1[2];
pipe(pipe1);
int i;
for(i = 2; i <= 35; i++){
write(pipe1[1], &i, sizeof(i));
}
i = -1;
write(pipe1[1], &i, sizeof(i));
close(pipe1[1]);
function(pipe1);
wait(0);
exit(0);
}
MIT 6.S081 质数筛 lab1
最新推荐文章于 2024-08-22 07:30:00 发布