共用方式為


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 也會建立處理程式在後續 呼叫 readFileWriteFile 函式時,用來讀取和寫入緩衝區的句柄。

若要從管道讀取,進程會在呼叫 readFile 函式時使用讀取句柄。 當下列其中一項為 true 時,ReadFile 傳回:寫入作業會在管道的寫入端完成、要求的位元元組數目已讀取,或發生錯誤。

當進程使用 WriteFile 寫入匿名管道時,寫入作業在寫入所有位元組之前都不會完成。 如果在寫入所有位元組之前,管道緩衝區已滿,WriteFile 不會傳回,直到其他進程或線程使用 ReadFile,才能提供更多的緩衝區空間。

匿名管道是使用具有唯一名稱的命名管道來實作。 因此,您通常會將句柄傳遞至匿名管道,以將句柄傳遞至需要命名管道句柄的函式。

如果 CreatePipe 失敗,輸出參數的內容會不確定。 在此事件中不應假設其內容。

若要釋放管道所使用的資源,應用程式應該一律在不再需要時關閉句柄,這可藉由呼叫 CloseHandle 函式或與實例句柄相關聯的進程結束來完成。 請注意,管道的實例可能有多個與其相關聯的句柄。 當命名管道實例的最後一個句柄關閉時,一律會刪除管道的實例。

例子

如需範例,請參閱 使用重新導向輸入和輸出建立子進程

要求

要求 價值
最低支援的用戶端 Windows 2000 專業版 [傳統型應用程式 |UWP 應用程式]
支援的最低伺服器 Windows 2000 Server [傳統型應用程式 |UWP 應用程式]
目標平臺 窗戶
標頭 namedpipeapi.h
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

管道函式

管道概觀

ReadFile

SECURITY_ATTRIBUTES

WriteFile