【发布时间】:2014-05-24 21:23:53
【问题描述】:
主进程创建一个新的子进程。这个子进程将创建另一个子进程, 以此类推,直到创建 N 个进程。 每个过程将使用管道通道与他的孩子讨论。 主进程(初始进程)会生成一个介于 1000 到 10000 之间的随机数,然后开始游戏。 游戏将在所有进程创建后开始。 每个进程将减去一个随机值(10 到 20 之间)并将新数字发送给他的孩子。 孩子将执行相同的操作并进一步发送号码。 当数字达到最后一个孩子时,游戏结束。此过程将仅打印收到的号码。
我试过这个:
int main()
{
int i;
int n;
int c;
int p1[2];
int p2[2];
if ( fork() > 0 ) {
if ( n > 10000 )
n = rand() % 10000 + 1;
write(p2[0], &n, sizeof(int));
read(p1[1], &n, sizeof(int));
}
for (i = 1; i <= N; i++) {
if ( fork() == 0 ) {
n = read(p2[1], &n, sizeof(int));
if ( c > 20 ) {
c = rand() % 20 + 1;
}
n = n - c;
write(p1[0], &n, sizeof(int));
}
}
printf("%d", n);
}
但我意识到我是在绕圈子,因为输出总是相同的数字,无论我使用多少个进程,事实上我实际上是在创建 N 个孩子而不是创建一个孩子,然后是孩子,等等。
有什么想法吗?
谢谢。
【问题讨论】:
-
您的代码似乎有很多问题,这对 SO 来说太宽泛了。对于初学者,在使用它们之前初始化变量...
-
另外,注意fork返回两次,在两个进程中(几乎)同时返回,返回值不同。你完全错过了处理(更不用说第三种可能性,失败和返回值 -1 并且没有新进程)。