一个简单的linux多进程程序。输入一些数字,例如 ./findPrime 10 20 30。程序将创建 3 个子进程来找出 2-10、10-20、20-30 之间的所有素数。一旦子进程找到素数,它将通过管道写入“2 是素数”并发送给父进程。家长将其打印在屏幕上。这里的问题是,我使用一个while循环将消息写入管道并在父端使用另一个while循环来接收消息,但是使用下面的代码,它只显示第一条消息,所以我想知道什么` s 继续,我怎样才能继续从那个管道读取?我错过了什么吗?非常感谢!
char readBuffer[100];
char outBuffer[15];
int pids[argc];
int fd[2];
pipe(fd);
for(i = 0; i < argc; i++)
{
if( i == 0)
bottom = 2;
else
bottom = args[i - 1];
top = args[i];
pids[i] = fork();
if(pids[i] == 0)
{
printf("Child %d: bottom=%d, top=%d\n", getpid(), bottom, top);
close(fd[0]);
j = bottom;
while(j <= top)
{
int res = findPrime(j);
if(res == 1)
{
sprintf(outBuffer, "%d is prime", j);
write(fd[1], outBuffer, (strlen(outBuffer)+1));
}
j++;
}
exit(0x47);
}
else if(pids[i] < 0)
{
fprintf(stderr, "fork failed! errno = %i\n", errno);
break;
}
else
{
close(fd[1]);
while((nbytes = read(fd[0], readBuffer, sizeof(readBuffer))) > 0 )
printf("%s\n", readBuffer);
int status = 0;
pid = waitpid(pids[i], &status, 0);
if(pid >= 0)
printf("Child %d exited cleanly\n", pid);
}
}
这些子进程应该按照它们创建的顺序运行,比如当进程 1 完成时,进程 2 将运行,进程 3 将在 2 之后运行。我还希望父进程在收到消息时立即显示消息。