0

端末から 5 台のロボットを管理する Linux 用の C プログラムを開発しようとしています。

1 つの親プロセスがあり、5 つの子プロセスが必要です。

例えば「Robot1 right 50」と書くと端末1の動きが表示されます。私はこれを完璧に行うことができますが、一度だけです。つまり、何らかの命令を入力するために while ループを作成しようとすると、最初のコマンドの後でコンピューターが狂って再起動します。

問題になる可能性のあるコードをいくつか示します。

これは私がフォークする方法です:

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

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

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

}

私はいくつかのデータを子供たちに渡す必要がありますが、そのうちの1つだけがコードを実行するようにしたいので、次のようにします:

/*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() の命令の後にコードを実行するのは 1 つの子だけです。それは、パイプ行列内の位置が「pos」に等しいものになります。他の人たちは、彼のパイプに書かれた何かを待ち続けます。(決して起こりません)。

そのため、コードを実行した子が最後に到達すると、別の書き込み/読み取り命令によって親にデータを送信します。その後、もう一度プロセスを再開したいと思います。しかし、私はそれを行うことができません。何か案が?

4

0 に答える 0