C 主进程创建一个新的子进程。此子流程将创建另一个子流程,依此类推,直到创建N个流程为止
主进程创建一个新的子进程。此子流程将创建另一个子流程, 依此类推,直到创建了N个进程。 每个过程将使用管道通道与孩子讨论。 主进程(初始进程)将生成1000到10000之间的随机数并开始游戏。 游戏将在创建所有进程后开始。 每个进程将减去一个随机值(10到20之间),并将新的数字发送给他的孩子。 孩子将执行相同的操作并进一步发送号码。 当数字到达最后一个孩子时,游戏结束。此过程将仅打印收到的号码 我试过这个:C 主进程创建一个新的子进程。此子流程将创建另一个子流程,依此类推,直到创建N个流程为止,c,fork,pipe,C,Fork,Pipe,主进程创建一个新的子进程。此子流程将创建另一个子流程, 依此类推,直到创建了N个进程。 每个过程将使用管道通道与孩子讨论。 主进程(初始进程)将生成1000到10000之间的随机数并开始游戏。 游戏将在创建所有进程后开始。 每个进程将减去一个随机值(10到20之间),并将新的数字发送给他的孩子。 孩子将执行相同的操作并进一步发送号码。 当数字到达最后一个孩子时,游戏结束。此过程将仅打印收到的号码 我试过这个: int main() { int i; int n; int
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);
}
intmain()
{
int i;
int n;
INTC;
int p1[2];
int p2[2];
如果(fork()>0){
如果(n>10000)
n=rand()%10000+1;
写入(p2[0],&n,sizeof(int));
读取(p1[1],&n,sizeof(int));
}
对于(i=1;i=20){
c=rand()%20+1;
}
n=n-c;
写入(p1[0],&n,sizeof(int));
}
}
printf(“%d”,n);
}
但我意识到我在循环,因为输出总是相同的数字,无论我使用多少个进程,事实上我实际上是在创建N个子对象,而不是创建一个子对象,然后是子对象的子对象,依此类推
有什么想法吗
谢谢。我看到的一个错误是fork不是一个变量,它是一个函数,更确切地说是一个系统调用。但是,你用它作为变量
您应该在if语句中检查f,而不是在标准库中检查函数的地址我的建议是停止检查fork()并开始检查f。它仍然不能正常工作。它只是多次打印相同的数字。但是谢谢你的建议,我相信它在将来会有用的。你的代码似乎有太多的错误,这是一个太宽泛的问题。对于初学者,在使用变量之前先初始化它们……另外,请注意fork返回两次,在两个进程(几乎)同时返回,返回值不同。您完全没有处理它(更不用说第三种可能性,失败和返回值-1,并且没有新的流程)。