Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 主进程创建一个新的子进程。此子流程将创建另一个子流程,依此类推,直到创建N个流程为止_C_Fork_Pipe - Fatal编程技术网

C 主进程创建一个新的子进程。此子流程将创建另一个子流程,依此类推,直到创建N个流程为止

C 主进程创建一个新的子进程。此子流程将创建另一个子流程,依此类推,直到创建N个流程为止,c,fork,pipe,C,Fork,Pipe,主进程创建一个新的子进程。此子流程将创建另一个子流程, 依此类推,直到创建了N个进程。 每个过程将使用管道通道与孩子讨论。 主进程(初始进程)将生成1000到10000之间的随机数并开始游戏。 游戏将在创建所有进程后开始。 每个进程将减去一个随机值(10到20之间),并将新的数字发送给他的孩子。 孩子将执行相同的操作并进一步发送号码。 当数字到达最后一个孩子时,游戏结束。此过程将仅打印收到的号码 我试过这个: int main() { int i; int n; int

主进程创建一个新的子进程。此子流程将创建另一个子流程, 依此类推,直到创建了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);
}
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,并且没有新的流程)。