pipe() を適切に使用して2つのプロセス間で整数値を渡す方法について少し混乱しています。
私のプログラムでは、最初にパイプを作成し、次にフォークします。「2」本のパイプがあると思いますか?
私の理解では、これが私の任務です。私の親は、特定の操作の整数値「i」をチェックする for ループを通過し、カウント変数を増やし、値を配列に保存します。各チェックの後、親はパイプを介して整数値「i」を子供に渡す必要があります。次に、私の子供はその整数値を使用し、値をチェックして、カウント変数を増やし、結果を [shared?] 配列に保存する必要があります。最終的; 子は最終カウントを親に返す必要があり、親は 2 つのカウントと「共有」配列を出力します。
->共有配列が必要なのか、結果を保存する必要があるのか わかりません。必要なのは数だけかもしれません。宿題があいまいで、教授からの返事を待っています。また; プロセス間で共有配列を行うこともできますか? それは私にとって何か問題の始まりのように聞こえます。
-> 私の質問は次のとおりです。整数にパイプを使用するにはどうすればよいですか? 文字配列についてのみ見たことがありますが、以前の回答では、これが可能または合法であるとは考えられていないようです..? わからない。私が見つけることができる解決策はありませんでした。
-> 一方向パイプを使用して整数を子に渡すにはどうすればよいですか? そして、子供に何かを返してもらいますか?どうすれば... 2つのパイプを区別できるのかわかりません。「漠然とした問題」を避けるために、各パイプの未使用部分を1つ閉じる必要があることを「知っている」[または知っていると思う]。
ばかげた質問で申し訳ありません。このクラスでは、プロセス (フォークを除く) やパイプ (まったく) をまだ教えられていないので、どこから始めればよいかわかりません。
これは私のコードの一部です。きれいではなく、機能せず、期待していません。それはシェルのプレースホルダーです。パイプの使い方を理解したら、おそらくコードを理解できるでしょう。
int main(void)
{
int fd[2];
pid_t childpid;
pid_t parentpid;
int i;
int threecount = 0;
int fivecount = 0;;
int results [MAXSIZE];
parentpid = getpid(); //Get current process ID number
pipe(fd);
childpid = fork();
if(childpid == 0){
close(fd[0]); //Closing this for some other reason
}
int j = 0;
if(childpid > 0)
close(fd[1]); //Closing this for some reason
if( childpid == -1 )
{
perror("Failed to fork\n");
return 1;
}
if (childpid > 0)
{
for(i = 1; i < MAXSIZE;i++)
{
if(i % 5 == 0)
{
fivecount++;
i = results[j];
j++;
wait(NULL);
}
}
}
else if (childpid == 0)
{
if(i % 3 == 0) //This i here should probably be the i value above, piped to the child
{
threecount++;
i = results[j]; //This should be part of th pipe
j++; //Trying to keep count of that shared array, not really the right way to do it though.
}
}
printf("%d %d \n", fivecount,threecount);
return 0;
}