CreatePipe() で C++ でパイプを作成する方法
C++のパイプ機能は、CreatePipe()関数を呼び出して作成できます。
- ヘッダーファイルを含める:#include
- パイプの読み取りハンドルと書き込みハンドル変数を宣言する: HANDLE hReadPipe, hWritePipe;
- CreatePipe(&hReadPipe, &hWritePipe, NULL, 0) でパイプを作成する。
- 最初の引数は、読み込み側ハンドルへのポインタを指しているポインタである。
- 第二引数は書き込み側ハンドルへのポインターのポインターを指します。
- 3番目のパラメータは、SECURITY_ATTRIBUTES構造へのポインタで、パイプのセキュリティ属性を設定することができる。NULLを使用すると、既定の属性が使用される。
- 4番目の引数はパイプのバッファサイズを指定します。0を指定すると、デフォルトのサイズが使用されます。
- CreatePipe()関数がパイプの作成に成功したかどうか確認してください。成功した場合、読み取り端と書き込み端のハンドル変数に値が割り当てられます。
- (hReadPipe != NULL && hWritePipe != NULL) ? (// パイプの作成に成功) : (// パイプの作成に失敗)
- パイプを使用して読み取りと書き込み操作を行います。
- 読み込み側:ReadFile() 関数を使用してパイプからデータを読み取ることができます。
// バッファの宣言
char buffer[1024];
DWORD bytesRead;// パイプからデータを読み取る
if (ReadFile(hReadPipe, buffer, sizeof(buffer), &bytesRead, NULL)) {
// 読み込みに成功
} else {
// 読み込みに失敗
} - 書き込み先:WriteFile() 関数を使用して、パイプにデータを書き込むことができます。
// データの宣言
char data[] = “Hello, pipe!”;
DWORD bytesWritten;// パイプにデータを書き込む
WriteFile(hWritePipe, data, sizeof(data), &bytesWritten, NULL) の場合 {
// 書き込み成功
} それ以外の場合は、 {
// 書き込み失敗
} - パイプの読み取りおよび書き込みのハンドルを閉じてください。
- CloseHandle(hReadPipe);
CloseHandle(hWritePipe);
上記のコードは簡単な例として記載しており、実際にはエラー処理やその他の実装が必要になる場合がありますのでご注意ください。