共用方式為


匿名管道作業

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

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

若要寫入管道,請在對 WriteFile 函式的呼叫中使用管道的寫入控制碼。 WriteFile呼叫不會傳回,直到將指定的位元組數目寫入管道或發生錯誤為止。 如果管道緩衝區已滿,而且要寫入更多位元組, 則 WriteFile 不會傳回,直到另一個進程從管道讀取為止,讓更多的緩衝區空間可用。 管道伺服器會在呼叫 CreatePipe時指定管道的緩衝區大小。

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

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

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