0

我正在尝试为 Linux 开发一个 C 程序,该程序包括从终端管理 5 个机器人。

有一个父进程,我需要五个孩子。

例如,如果我写“Robot1 right 50”,终端 1 将显示它的移动。我可以完美地做到这一点,但只有一次。我的意思是,如果我尝试创建一个 while 循环来输入一些指令,我的计算机会在第一个命令后发疯并重新启动。

我将向您展示一些可能是问题的代码:

这是我分叉的方式:

for(i=0; i<num_proc; i++) {
    pid = fork();

    if(pid == 0) {
    /*Child code*/}

    else(pid){
    /*Parent code*/}

}

我需要将一些数据传递给孩子,但我只想要其中一个来执行代码,所以我这样做:

/*Inside parent code*/
write(pipeall[destino][1], id, 7);
write(pipeall[destino][1], arg, 3);
write(pipeall[destino][1], posxpadre, 4);           
write(pipeall[destino][1], posypadre, 4);
write(pipeall[destino][1], orden, 10);

 /*Inside children code*/
 read(pipeall[pos][0], idhijo, 7);
 read(pipeall[pos][0], arghijo, 3);
 read(pipeall[pos][0], posxpadre, 4);
 read(pipeall[pos][0], posypadre, 4);
 read(pipeall[pos][0], ordenhijo, 10);

据我所知,只有一个孩子会在 read() 的指令之后执行代码。那将是在管道矩阵内的位置等于“pos”的那个。其他人将继续等待他的管道中写入的内容。(这永远不会发生)。

因此,当执行代码的孩子到达最后时,它会通过另一个写/读指令将一些数据发送给他的父母。然后,我想再次重新启动该过程。但我做不到。任何想法?

4

0 回答 0