<Return[C]><Top>

CreatePipe

Declare Function Api_CreatePipe& Lib "kernel32" Alias "CreatePipe" (phReadPipe&, phWritePipe&, lpPipeAttributes As Any, ByVal nSize&)

Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As Any, ByVal nSize As Long) As Long

名前なしパイプを作成し、そのパイプの読み取り側と書き込み側の両方のハンドルを取得する。

パラメータ
hReadPipe
    1 個のの変数へのポインタを指定する。関数から制御が返ると、この変数に、名前なしパイプの読み取り側ハンドルが格納される。
hWritePipe
    1 個の変数へのポインタを指定する。関数から制御が返ると、この変数に、名前なしパイプの書き込み側ハンドルが格納される。
lpPipeAttributes
    1 個の SECURITY_ATTRIBUTES 構造体へのポインタを指定する。

    この構造体で、子プロセスが、返されたハンドルを継承できるかどうかを指定する。

    このパラメータで NULL を指定すると、既定のセキュリティ記述子が使われ、ハンドルを継承できない。
    Windows NT/2000:SECURITY_ATTRIBUTES 構造体の lpSecurityDescriptor メンバでセキュリティ記述子を指定する。

    lpPipeAttributes パラメータで NULL を指定すると、既定のセキュリティ記述子がパイプに適用される。
nSize
    パイプのバッファのサイズをバイト単位で指定する。このサイズは、参考として使われるだけ。

    システムはこの値を使って、適切なバッファリングメカニズムを決定する。

    このパラメータで 0 を指定すると、既定のバッファサイズが割り当てらる。


戻り値
    関数が成功すると、0 以外の値が返る。
    関数が失敗すると、0 が返る。拡張エラー情報を取得するには、GetLastError 関数を使う。

解説
    CreatePipe 関数はパイプを作成し、格納用のバッファに、指定されたパイプサイズを割り当てる。

    また、そのパイプに関係する 2 個のハンドルを作成するが、プロセスはそれ以降に ReadFile と WriteFile の各関数を呼び出す際に、その

    ハンドルを使ってバッファの読み書きを行う。
    パイプからデータを読み取るには、読み取りハンドルを指定して ReadFile 関数を呼び出する。パイプの書き込み側で書き込み操作が完了す

    るか、要求されたバイト数の読み取りが完了するか、エラーが発生すると、ReadFile 関数は制御を返する。
    プロセスが WriteFile 関数を使って名前なしパイプへの書き込みを行う場合、すべてのバイトを書き込み終えるまで、書き込みは完了しな

    い。パイプ用のバッファがいっぱいになっている場合、ほかのプロセスやスレッドが ReadFile 関数を呼び出してバッファに空きを作るまで、

    WriteFile 関数は制御を返しない。
    Windows NT/2000:名前なしパイプは、一意の名前を持つ名前付きパイプとして実装されている。そのため、多くの場合、名前付きパイ

    プのハンドルを必要とする関数に対して、名前なしパイプのハンドルを渡すことができる。