匿名管道作業
CreatePipe 函式會建立匿名管道,並傳回兩個句柄:管道的讀取句柄和管道的寫入句柄。 讀取句柄具有管道的唯讀存取權,而寫入句柄具有管道的唯讀存取權。 若要使用管道進行通訊,管道伺服器必須將管道句柄傳遞至另一個進程。 通常,這是透過繼承來完成;也就是說,進程允許子進程繼承句柄。 此進程也可以使用 DuplicateHandle 函式複製管道句柄,並使用某種形式的進程間通訊,例如 DDE 或共用記憶體,將它傳送至不相關的進程。
管道伺服器可以傳送讀取句柄或寫入句柄給管道客戶端,視用戶端是否應該使用匿名管道傳送資訊或接收資訊而定。 若要從管道讀取,請在呼叫 ReadFile 函式時,使用管道的讀取句柄。 ReadFile 呼叫會在另一個進程寫入管道時傳回。 如果管道的所有寫入句柄都已關閉,或讀取作業完成之前發生錯誤,ReadFile 呼叫也可以傳回。
若要寫入管道,請在呼叫 WriteFile 函式時,使用管道的寫入句柄。 WriteFile 呼叫不會傳回,直到將指定的位元組數目寫入管道或發生錯誤為止。 如果管線緩衝區已滿且要寫入更多位元組,WriteFile 不會傳回,直到另一個進程從管道讀取,才能提供更多的緩衝區空間。 管道伺服器會在呼叫 createPipe 時,指定管道的緩衝區大小。
匿名管道不支援異步(重疊)讀取和寫入作業。 這表示您無法搭配匿名管道使用 ReadFileEx 和 WriteFileEx 函式。 此外,當這些函式搭配匿名管道使用時,會忽略 readFile和 WriteFilelpOverlapped 參數。
匿名管道存在,直到所有管道句柄讀取和寫入都已關閉為止。 進程可以使用 CloseHandle 函式來關閉其管線控點。 當進程終止時,所有管道句柄也會關閉。
匿名管道是使用具有唯一名稱的命名管道來實作。 因此,您通常會將句柄傳遞至匿名管道,以將句柄傳遞至需要命名管道句柄的函式。