1,2,4,8 などのシーケンスの N 個の要素を出力したいのですが、N 個の子プロセスと N-1 個のパイプでそれを実行しようとしています。したがって、プロセス "i" が "a[i]" を計算すると、その値がプロセス i+1 に渡されるため、プロセスは a[i+1] などを計算できます...
私はこれを書いた:
int main(){
int a = 1;
int i,j;
int cev[N-1][2];
for(i=0; i<N-1; i++) pipe(cev[i]);
for(i=0; i<N; i++){
if(fork() == 0){ // child
if(i>0){
read(cev[i][READ],&a,sizeof(int));
a = f(a); // calculate next element
}
printf("%d ",a); fflush(stdout);
if(i!=N-1) write(cev[i+1][WRITE],&a,sizeof(int));
// closing copies of pipes
for(j=0; j<N-1; j++){
close(cev[j][READ]);
close(cev[j][WRITE]);
}
exit(0);
}
}
私には正しいように思えますが、N=5 に対して得られる数列は 2 1 2 4 8 です。