CreatePipe 函式 (namedpipeapi.h)
建立匿名管道,並將句柄傳回管道的讀取和寫入端。
語法
BOOL CreatePipe(
[out] PHANDLE hReadPipe,
[out] PHANDLE hWritePipe,
[in, optional] LPSECURITY_ATTRIBUTES lpPipeAttributes,
[in] DWORD nSize
);
參數
[out] hReadPipe
接收管道讀取句柄之變數的指標。
[out] hWritePipe
接收管道寫入句柄之變數的指標。
[in, optional] lpPipeAttributes
SECURITY_ATTRIBUTES 結構的指標,決定傳回的句柄是否可以由子進程繼承。 如果 lpPipeAttributesNULL,則無法繼承句柄。
lpSecurityDescriptor 結構的成員會指定新管道的安全性描述元。 如果 lpPipeAttributesNULL,管道會取得預設的安全性描述元。 管道的預設安全性描述元中的 ACL 來自建立者的主要或模擬令牌。
[in] nSize
管道緩衝區的大小,以位元組為單位。 大小只是建議;系統會使用 值來計算適當的緩衝機制。 如果此參數為零,系統會使用默認緩衝區大小。
傳回值
如果函式成功,則傳回值為非零值。
如果函式失敗,傳回值為零。 若要取得擴充的錯誤資訊,請呼叫 GetLastError。
言論
CreatePipe 建立管道,並將指定的管道大小指派給記憶體緩衝區。 CreatePipe 也會建立處理程式在後續 呼叫 readFile 和 WriteFile 函式時,用來讀取和寫入緩衝區的句柄。
若要從管道讀取,進程會在呼叫 readFile 函式時使用讀取句柄。 當下列其中一項為 true 時,ReadFile 傳回:寫入作業會在管道的寫入端完成、要求的位元元組數目已讀取,或發生錯誤。
當進程使用 WriteFile 寫入匿名管道時,寫入作業在寫入所有位元組之前都不會完成。 如果在寫入所有位元組之前,管道緩衝區已滿,WriteFile 不會傳回,直到其他進程或線程使用 ReadFile,才能提供更多的緩衝區空間。
匿名管道是使用具有唯一名稱的命名管道來實作。 因此,您通常會將句柄傳遞至匿名管道,以將句柄傳遞至需要命名管道句柄的函式。
如果 CreatePipe 失敗,輸出參數的內容會不確定。 在此事件中不應假設其內容。
若要釋放管道所使用的資源,應用程式應該一律在不再需要時關閉句柄,這可藉由呼叫 CloseHandle 函式或與實例句柄相關聯的進程結束來完成。 請注意,管道的實例可能有多個與其相關聯的句柄。 當命名管道實例的最後一個句柄關閉時,一律會刪除管道的實例。
例子
如需範例,請參閱 使用重新導向輸入和輸出建立子進程。
要求
要求 | 價值 |
---|---|
最低支援的用戶端 | Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式] |
支援的最低伺服器 | Windows 2000 Server [傳統型應用程式 |UWP 應用程式] |
目標平臺 | 窗戶 |
標頭 | namedpipeapi.h |
連結庫 | Kernel32.lib |
DLL | Kernel32.dll |