Windowsで名前付きパイプを作成するには、CreateNamedPipeを使う・・・。
名前なしパイプと比べると、あそこまで大変ではない・・・。
CreateNamedPipeプロジェクトにCreateNamedPipe.cppを追加し、
CreateNamedPipeで"\\.\pipe\TEST"という名前付きパイプを作成し、hNamedPipeに格納・・・。
PIPE_ACCESS_DUPLEXだと1つで読み書き両方できる模様・・・。
("\\.\pipe\"を付けるのが決まり・・・。)
作成したら、ConnectNamedPipeで接続する・・・。
3秒待って、WriteFileでhNamedPipeに"I am Parent!"を書き込む・・・。
9秒待って、ReadFileでhNamedPipeから読み込んでszBuf2に格納して変換して出力・・・。
FlushFileBuffersでバッファをフラッシュ・・・。
DisconnectNamedPipeで切断・・・。
CloseHandleでhNamedPipeを閉じる・・・。
ChildProcessプロジェクトを作成し、ChildProcess.cppを追加し、
こちら側はCreateFileで"\\.\pipe\TEST"という名前付きパイプをOPEN_EXISTINGで開き、ハンドルはhNamedPipeに格納・・・。
(失敗したらエラーで終了・・・。)
6秒後にReadFileでhPipedNameから読み込んだ内容を出力・・・。
その3秒後にhNamedPipeに"I am Child!"と書き込む・・・。
CloseHandleでhNamedPipeを閉じる・・・。
(フラッシュとか切断とかしなくていいのか・・・。)
CreateNamedPipe.exeとChildProcess.exeを同時に実行すると、
CreateNamedPipe.exe側は3秒後に、
Parent: I am Parent!
で、その3秒後にChildProcess.exeで、
Child: I am Parent!
でその3秒後に、
Child: I am Parent! Child: I am Child!
となり、その3秒後にCreateNamedPipe.exeは、
Parent: I am Parent! Parent: I am Child!
となる・・・。