Linux の単純なマルチプロセス プログラム。./findPrime 10 20 30 のような数値を入力します。プログラムは 3 つの子プロセスを作成して、2 ~ 10、10 ~ 20、20 ~ 30 の間のすべての素数を見つけます。子プロセスが素数を見つけると、パイプを介して「2 は素数です」と書き込み、親プロセスに送信します。親はそれを画面に印刷します。ここでの問題は、while ループを使用してパイプにメッセージを書き込み、親側で別の while ループを使用してメッセージを受信することですが、以下のコードでは最初のメッセージしか表示されないため、進行中です。どうすればそのパイプから読み続けることができますか? 私は何かを逃しましたか?どうもありがとう!
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 の後に実行されるように、作成された順序で実行する必要があります。