次の方法で共有


匿名パイプ操作

CreatePipe 関数は、匿名パイプを作成し、パイプへの読み取りハンドルとパイプへの書き込みハンドルの 2 つのハンドルを返します。 読み取りハンドルにはパイプへの読み取り専用アクセス権があり、書き込みハンドルにはパイプへの書き込み専用アクセス権があります。 パイプを使用して通信するには、パイプ サーバーがパイプ ハンドルを別のプロセスに渡す必要があります。 通常、これは継承によって行われます。つまり、このプロセスでは、子プロセスによってハンドルを継承できます。 また、このプロセスでは、DuplicateHandle 関数を使用してパイプ ハンドルを複製し、DDE や共有メモリなどの何らかの形式のプロセス間通信を使用して、関連付けられていないプロセスに送信することもできます。

パイプ サーバーは、クライアントが匿名パイプを使用して情報を送信するか、情報を受信するかに応じて、読み取りハンドルまたは書き込みハンドルをパイプ クライアントに送信できます。 パイプから読み取る場合は、ReadFile 関数の呼び出しでパイプの読み取りハンドルを使用します。 ReadFile 呼び出しは、別のプロセスがパイプに書き込まれたときに返されます。 ReadFile 呼び出しは、パイプへのすべての書き込みハンドルが閉じられた場合や、読み取り操作が完了する前にエラーが発生した場合にも返すことができます。

パイプに書き込むには、WriteFile 関数の呼び出しでパイプの書き込みハンドルを使用します。 WriteFile 呼び出しは、指定したバイト数をパイプに書き込むか、エラーが発生するまで戻りません。 パイプ バッファーがいっぱいで、書き込むバイト数が多い場合、WriteFile は、別のプロセスがパイプから読み取るまで戻らず、使用可能なバッファー領域が増えます。 パイプ サーバーは、CreatePipeを呼び出すときに、パイプバッファー サイズを指定します。

非同期 (重複) の読み取り操作と書き込み操作は、匿名パイプではサポートされていません。 つまり、匿名パイプを使用して、ReadFileEx および WriteFileEx関数をすることはできません。 さらに、これらの関数が匿名パイプと共に使用される場合、ReadFileWriteFilelpOverlapped パラメーターは無視されます。

匿名パイプは、読み取りと書き込みの両方のすべてのパイプ ハンドルが閉じられるまで存在します。 プロセスは、CloseHandle 関数を使用してパイプ ハンドルを閉じることができます。 プロセスが終了すると、すべてのパイプ ハンドルも閉じられます。

匿名パイプは、一意の名前を持つ名前付きパイプを使用して実装されます。 そのため、多くの場合、名前付きパイプへのハンドルを必要とする関数に匿名パイプにハンドルを渡すことができます。