gpt4 book ai didi

c - 通过管道从多个子进程写入父进程

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:21 26 4
gpt4 key购买 nike

这是我针对这种情况的代码。基本上,我有很多 child ,他们应该从 ptList 中计算出一定数量的点,将各自的点传递给 parent ,然后 parent 将它们加起来。不幸的是,在我的 printfs 中,“addToTotal”变量没有更新超过第一个 child ,我的回答是不正确的。任何建议都会令人难以置信。

pid_t worker[ workers ];
for (int i = 0; i < workers; i++) {
//printf( "I am child %i\n", i );
if ((worker[i] = fork()) < 0) {
fail( "Can't create child");
} else if ( worker[i] == 0) {
//Close the reading end of the pipe for each child
close( pfd[0] );

// Get each of the workers to compare points
for ( int k = i; k < ptCount; k += workers ) {
for ( int j = k + 1; j < ptCount; j++) {
int dx = ptList[ k ].x - ptList[ j ].x;
int dy = ptList[ k ].y - ptList[ j ].y;
if ( dx * dx + dy * dy <= dsq )
childTotal++;
}
}
printf( "Child %i total: %i\n", i, childTotal );
lockf( pfd[ 1 ], F_LOCK, 0 );
write( pfd[ 1 ], &childTotal, sizeof( childTotal ));
lockf( pfd[ 1 ], F_ULOCK, 0 );
close( pfd[ 1 ] );
exit(0);
wait(NULL);
}
wait(NULL);
close( pfd[ 1 ] );
read( pfd[ 0 ], &addToTotal, sizeof( addToTotal ) );
printf( "AddToTotal: %i\n", addToTotal );
total += addToTotal;
}

最佳答案

child 得到一个写端关闭的管道,因为你在行中明确地关闭了它:

close( pfd[ 1 ] );

然后在下一次迭代中您尝试再次写入管道:

write( pfd[ 1 ], &childTotal, sizeof( childTotal ));

关于c - 通过管道从多个子进程写入父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32407367/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com