プラットフォーム SDK
CreatePipe
ここに掲載されている内容は、コンテンツ提供時の情報で、以前は有効であったリンクやURLが現在無効になっている場合や、技術情報が最新の情報と異なる場合がありますのでご了承ください。
最新の情報については、Platform SDK: Interprocess Communications (英語)または、http://msdn.microsoft.com/library/en-us/ipc/base/interprocess_communications.asp
をご覧ください。名前なしパイプを作成し、そのパイプの読み取り側と書き込み側の両方のハンドルを取得します。
BOOL CreatePipe(
PHANDLE hReadPipe, // 読み取り側のハンドル
PHANDLE hWritePipe, // 書き込み側のハンドル
LPSECURITY_ATTRIBUTES lpPipeAttributes, // セキュリティ属性
DWORD nSize // パイプのサイズ
);
パラメータ
- hReadPipe
- 1 個のの変数へのポインタを指定します。関数から制御が返ると、この変数に、名前なしパイプの読み取り側ハンドルが格納されます。
- hWritePipe
- 1 個の変数へのポインタを指定します。関数から制御が返ると、この変数に、名前なしパイプの書き込み側ハンドルが格納されます。
- lpPipeAttributes
- 1 個の 構造体へのポインタを指定します。この構造体で、子プロセスが、返されたハンドルを継承できるかどうかを指定します。このパラメータで NULL を指定すると、既定のセキュリティ記述子が使われ、ハンドルを継承できません。
Windows NT/2000:SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバでセキュリティ記述子を指定します。lpPipeAttributes パラメータで NULL を指定すると、既定のセキュリティ記述子がパイプに適用されます。
- nSize
- パイプのバッファのサイズをバイト単位で指定します。このサイズは、参考として使われるだけです。システムはこの値を使って、適切なバッファリングメカニズムを決定します。このパラメータで 0 を指定すると、既定のバッファサイズが割り当てられます。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
解説
CreatePipe 関数はパイプを作成し、格納用のバッファに、指定されたパイプサイズを割り当てます。また、そのパイプに関係する 2 個のハンドルを作成しますが、プロセスはそれ以降に ReadFile と WriteFile の各関数を呼び出す際に、そのハンドルを使ってバッファの読み書きを行います。
パイプからデータを読み取るには、読み取りハンドルを指定して ReadFile 関数を呼び出します。パイプの書き込み側で書き込み操作が完了するか、要求されたバイト数の読み取りが完了するか、エラーが発生すると、ReadFile 関数は制御を返します。
プロセスが WriteFile 関数を使って名前なしパイプへの書き込みを行う場合、すべてのバイトを書き込み終えるまで、書き込みは完了しません。パイプ用のバッファがいっぱいになっている場合、ほかのプロセスやスレッドが ReadFile 関数を呼び出してバッファに空きを作るまで、WriteFile 関数は制御を返しません。
Windows NT/2000:名前なしパイプは、一意の名前を持つ名前付きパイプとして実装されています。そのため、多くの場合、名前付きパイプのハンドルを必要とする関数に対して、名前なしパイプのハンドルを渡すことができます。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winbase.h 内で宣言、Windows.h をインクルード
インポートライブラリ:Kernel32.lib を使用
参照
, ,