共用方式為


匿名管道作業

CreatePipe 函式會建立匿名管道,並傳回兩個句柄:管道的讀取句柄和管道的寫入句柄。 讀取句柄具有管道的唯讀存取權,而寫入句柄具有管道的唯讀存取權。 若要使用管道進行通訊,管道伺服器必須將管道句柄傳遞至另一個進程。 通常,這是透過繼承來完成;也就是說,進程允許子進程繼承句柄。 此進程也可以使用 DuplicateHandle 函式複製管道句柄,並使用某種形式的進程間通訊,例如 DDE 或共用記憶體,將它傳送至不相關的進程。

管道伺服器可以傳送讀取句柄或寫入句柄給管道客戶端,視用戶端是否應該使用匿名管道傳送資訊或接收資訊而定。 若要從管道讀取,請在呼叫 ReadFile 函式時,使用管道的讀取句柄。 ReadFile 呼叫會在另一個進程寫入管道時傳回。 如果管道的所有寫入句柄都已關閉,或讀取作業完成之前發生錯誤,ReadFile 呼叫也可以傳回。

若要寫入管道,請在呼叫 WriteFile 函式時,使用管道的寫入句柄。 WriteFile 呼叫不會傳回,直到將指定的位元組數目寫入管道或發生錯誤為止。 如果管線緩衝區已滿且要寫入更多位元組,WriteFile 不會傳回,直到另一個進程從管道讀取,才能提供更多的緩衝區空間。 管道伺服器會在呼叫 createPipe 時,指定管道的緩衝區大小。

匿名管道不支援異步(重疊)讀取和寫入作業。 這表示您無法搭配匿名管道使用 ReadFileExWriteFileEx 函式。 此外,當這些函式搭配匿名管道使用時,會忽略 readFileWriteFilelpOverlapped 參數。

匿名管道存在,直到所有管道句柄讀取和寫入都已關閉為止。 進程可以使用 CloseHandle 函式來關閉其管線控點。 當進程終止時,所有管道句柄也會關閉。

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