CreateNamedPipe関数とConnectNamedPipe関数の使用方法
CreateNamedPipe関数は名前付きパイプを作成するための関数です。そのプロトタイプは以下のようになります:
HANDLE CreateNamedPipe(
LPCTSTR lpName,
DWORD dwOpenMode,
DWORD dwPipeMode,
DWORD nMaxInstances,
DWORD nOutBufferSize,
DWORD nInBufferSize,
DWORD nDefaultTimeOut,
LPSECURITY_ATTRIBUTES lpSecurityAttributes );
lpNameは、パイプの名前を表し、指定された名前規則を使用することができます。dwOpenModeは、パイプのオープンモードを表し、PIPE_ACCESS_INBOUND(読み取り専用)、PIPE_ACCESS_OUTBOUND(書き込み専用)、またはPIPE_ACCESS_DUPLEX(読み書き両用)のいずれかであることができます。dwPipeModeは、パイプのモードを表し、PIPE_TYPE_BYTE(バイトモード)またはPIPE_TYPE_MESSAGE(メッセージモード)のいずれかであることができます。nMaxInstancesは、パイプの最大インスタンス数を表します。nOutBufferSizeおよびnInBufferSizeは、パイプの出力バッファおよび入力バッファのサイズをそれぞれ表します。nDefaultTimeOutは、デフォルトのタイムアウト時間を表します。lpSecurityAttributesは、パイプのセキュリティを指定するためのSECURITY_ATTRIBUTES構造体へのポインタです。ConnectNamedPipe関数は、クライアントが名前付きパイプに接続するのを待機するために使用されます。そのプロトタイプは次のようになります:
BOOL ConnectNamedPipe(
HANDLE hNamedPipe,
LPOVERLAPPED lpOverlapped );
hNamedPipeはCreateNamedPipe関数から返されるパイプハンドルです。lpOverlappedは非同期操作に使用するOVERLAPPED構造体へのポインタです。使用法は以下の通りです:1. 名前付きパイプを作成します。
HANDLE hPipe; hPipe = CreateNamedPipe(
TEXT(“\\.\pipe\MyPipe”), // 管道名称
PIPE_ACCESS_DUPLEX, // 读写模式
PIPE_TYPE_BYTE, // 字节模式
1, // 最大实例数
4096, // 输出缓冲区大小
4096, // 输入缓冲区大小
0, // 默认超时时间
NULL // 安全性 );
2. クライアントの接続を待つ。
BOOL bConnected; bConnected = ConnectNamedPipe(hPipe, NULL);
使用パイプを使用してデータの送受信などを行います。注意事項:CreateNamedPipe関数はサーバー側で呼び出す必要があり、名前付きパイプを作成するために使用されます。ConnectNamedPipe関数はサーバー側で呼び出す必要があり、クライアントがパイプに接続するのを待ちます。通常、サーバー側はまずCreateNamedPipe関数を呼び出して名前付きパイプを作成し、次にConnectNamedPipe関数を呼び出してクライアントが接続するのを待ちます。クライアントはCreateFile関数を使用して名前付きパイプを開き、その後データの送受信などを行うことができます。パイプの名前は”\.\pipe”で始める必要があります。パイプはプロセス間通信に使用できます。