4

私が見たほとんどすべてのpipe例は、未使用の書き込み/読み取りを終了するというアドバイスです。また、男性は明確に述べていpipe() creates a pipe, a unidirectional data channelますが、親と子の両方でパイプの両端に読み書きを試みましたが、すべて問題ないようです。

だから私の疑問は、2つのプロセスが互いに読み取りと書き込みの両方を行う必要がある場合、なぜ2つのパイプが必要なのか、そして単一のパイプを使用してそれを行わないのはなぜですか?

4

2 に答える 2

8

同じパイプを使用する場合、子はどのようにメッセージを親メッセージから分離し、その逆も同様ですか?

例えば:

Parent writes to pipe
Parent reads from pipe hoping to get message from child but gets its own message :(

child->parent に 1 つのパイプを使用し、parent->child に別のパイプを使用する方がはるかに簡単です。

読み取り/書き込み用のプロトコルがある場合でも、親プロセスと子プロセスをデッドロックするのは非常に簡単です。

于 2012-04-13T13:30:42.450 に答える
5

作成されたパイプの両端で読み取りと書き込みを行うことができますが、一方向とは、データが常に一方向 (親から子へ、またはその逆) にのみ移動することを意味します。データのノンブロッキング送受信には 2 つのパイプが必要です。つまり、2 つのパイプを使用して同時に読み取りと書き込みを行うことができますが、1 つのパイプの場合、パイプに書き込む前に読み取りを終了するか、何かを書き込みを終了する必要があります。パイプを読む前に。簡単に言えば、いつでも 1 つのパイプでのみ読み取りまたは書き込みを行うことができます。

于 2012-04-13T13:29:55.683 に答える