CreatePipe 関数 (namedpipeapi.h)
匿名パイプを作成し、パイプの読み取りおよび書き込み終端にハンドルを返します。
構文
BOOL CreatePipe(
[out] PHANDLE hReadPipe,
[out] PHANDLE hWritePipe,
[in, optional] LPSECURITY_ATTRIBUTES lpPipeAttributes,
[in] DWORD nSize
);
パラメーター
[out] hReadPipe
パイプの読み取りハンドルを受け取る変数へのポインター。
[out] hWritePipe
パイプの書き込みハンドルを受け取る変数へのポインター。
[in, optional] lpPipeAttributes
返された ハンドルを子 プロセスによって継承できるかどうかを決定するSECURITY_ATTRIBUTES構造体へのポインター。 lpPipeAttributes が NULL の場合、ハンドルを継承できません。
構造体の lpSecurityDescriptor メンバーは、新しいパイプのセキュリティ記述子を指定します。 lpPipeAttributes が NULL の場合、パイプは既定のセキュリティ記述子を取得します。 パイプの既定のセキュリティ記述子の ACL は、作成者のプライマリ トークンまたは偽装トークンから取得されます。
[in] nSize
パイプのバッファーのサイズ (バイト単位)。 サイズは単に提案です。システムは、値を使用して適切なバッファリング メカニズムを計算します。 このパラメーターが 0 の場合、システムは既定のバッファー サイズを使用します。
戻り値
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
CreatePipe によって パイプが作成され、指定されたパイプ サイズがストレージ バッファーに割り当てられます。 CreatePipe では、 ReadFile 関数と WriteFile 関数の後続の呼び出しで、プロセスがバッファーの読み取りとバッファーへの書き込みに使用するハンドルも作成されます。
パイプから読み取るために、プロセスは ReadFile 関数の呼び出しで読み取りハンドルを使用します。 ReadFile は、パイプの書き込み終了時に書き込み操作が完了した場合、要求されたバイト数が読み取られた場合、またはエラーが発生した場合に返されます。
プロセスで WriteFile を使用して匿名パイプに書き込む場合、書き込み操作は、すべてのバイトが書き込まれるまで完了しません。 すべてのバイトが書き込まれる前にパイプ バッファーがいっぱいになった場合、 WriteFile は、別のプロセスまたはスレッドが ReadFile を使用してバッファー領域を増やすまで戻りません。
匿名パイプは、一意の名前を持つ名前付きパイプを使用して実装されます。 そのため、名前付きパイプへのハンドルを必要とする関数に、匿名パイプにハンドルを渡すことができることがよくあります。
CreatePipe が失敗した場合、出力パラメーターの内容は不確定になります。 このイベントでは、その内容について前提を立ててはなりません。
パイプで使用されるリソースを解放するには、アプリケーションはハンドルが不要になったときに常にハンドルを閉じる必要があります。これは、 CloseHandle 関数を呼び出すか、インスタンス ハンドルに関連付けられているプロセスが終了したときに実行されます。 パイプのインスタンスには、複数のハンドルが関連付けられている場合があることに注意してください。 名前付きパイプのインスタンスへの最後のハンドルが閉じられると、パイプのインスタンスは常に削除されます。
例
例については、「 リダイレクトされた入力と出力を使用した子プロセスの作成」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリ |UWP アプリ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリ |UWP アプリ] |
対象プラットフォーム | Windows |
ヘッダー | namedpipeapi.h |
Library | Kernel32.lib |
[DLL] | Kernel32.dll |