端末から 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」に等しいものになります。他の人たちは、彼のパイプに書かれた何かを待ち続けます。(決して起こりません)。
そのため、コードを実行した子が最後に到達すると、別の書き込み/読み取り命令によって親にデータを送信します。その後、もう一度プロセスを再開したいと思います。しかし、私はそれを行うことができません。何か案が?