ヘッダーファイルでパイプを宣言する必要がある割り当てがあります。私は本当にこれを行う方法がわかりません。それは本当にばかげた質問かもしれませんし、私は明白な何かを見逃しているかもしれません。私を正しい方向に向けていただければ幸いです。
御時間ありがとうございます。
編集:
質問があいまいでごめんなさい。たぶん、パイプについての理解を深める必要があります。
2つの子プロセス間にパイプを作成しようとしています。1人の子はランダムな文字をパイプに書き込み、もう1人の子はパイプから文字を読み取ります。
私は次のようなものを書いたときに何が起こるかを本当に理解していないと思います:
int fd[2];
pipe = pipe(fd);
パイプの書き込みファイル記述子と読み取りファイル記述子がそれぞれfd[0]
とに入れられていると言っているのは正しいfd[1]
ですか?子プロセスの1つで私が閉じたfd[1]
場合、その子は私のライターと見なすことができますよね?
編集2:
さて、ファイル記述子に関連するエラーが発生することを除いて、ほとんどすべてを理解して完了したように見えます。
私のコードは次のようになります:(これはパイプに関連するコードのみです)
proj2.h
extern int fd[2];
proj2.c
int fd[2];
pipe(fd);
writer.c
close(fd[0]);
result = write(fd[1], &writeBuffer, sizeof(writeBuffer));
if(result < 0){
perror("Write");
}
reader.c
close(fd[1]);
result = read(fd[0], &readBuffer, sizeof(readBuffer))
if(result < 0){
perror("Read");
}
コードを実行した後、read()とwrite()を繰り返すたびにエラーが発生し、「Badfiledescriptor」というエラーが発生します。私はこれを自分で解決するためにオンラインで検索しようとしましたが、そうするためにこの資料について十分に知っているとは思いません。どんな方向でももう一度大歓迎です。これまで貢献してくださった皆様、素晴らしい仕事をしていただき、誠にありがとうございます。また、宿題をしてもらうだけのようであれば、正直に頑張っていますが、それだけではありません。
編集3:
write()システムコールは標準出力への書き込みですか?リーダーがパイプから内容を読み取った後にのみ内容を印刷したい場合はどうなりますか?標準出力に書き込まずにパイプに書き込むにはどうすればよいですか?
編集4: 私は今すべてを理解しました。皆様のご協力に感謝いたします。私がまだ興味を持っているのは、どういうわけか親プロセスのステータスを取得できるかどうかだけです。wait()システム呼び出しを使用して子プロセスからステータスを収集しましたが、親プロセスのステータスを取得する方法を考えていました。