読者です 読者をやめる 読者になる 読者になる

CreateNamedPipe

Windowsで名前付きパイプを作成するには、CreateNamedPipeを使う・・・。

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!

となる・・・。

Sample/winapi/CreateNamedPipe/CreateNamedPipe/src/CreateNamedPipe at master · bg1bgst333/Sample · GitHub