Condividi tramite


Operazioni di pipe anonime

La funzione CreatePipe crea una pipe anonima e restituisce due handle: un handle di lettura alla pipe e un handle di scrittura nella pipe. L'handle di lettura ha accesso di sola lettura alla pipe e l'handle di scrittura ha accesso solo in scrittura alla pipe. Per comunicare usando la pipe, il server pipe deve passare un handle pipe a un altro processo. In genere, questa operazione viene eseguita tramite ereditarietà; ovvero, il processo consente all'handle di essere ereditato da un processo figlio. Il processo può anche duplicare un handle pipe usando la funzione DuplicateHandle e inviarlo a un processo non correlato usando una forma di comunicazione tra processi, ad esempio DDE o memoria condivisa.

Un server di pipe può inviare l'handle di lettura o l'handle di scrittura al client di pipe, a seconda che il client usi la pipe anonima per inviare informazioni o ricevere informazioni. Per leggere dalla pipe, usare l'handle di lettura della pipe in una chiamata alla funzione ReadFile . La chiamata ReadFile restituisce quando un altro processo è stato scritto nella pipe. La chiamata ReadFile può anche restituire se tutti gli handle di scrittura nella pipe sono stati chiusi o se si verifica un errore prima del completamento dell'operazione di lettura.

Per scrivere nella pipe, usare l'handle di scrittura della pipe in una chiamata alla funzione WriteFile . La chiamata WriteFile non restituisce finché non viene scritto il numero specificato di byte nella pipe o si verifica un errore. Se il buffer della pipe è pieno e ci sono più byte da scrivere, WriteFile non restituisce fino a quando un altro processo non legge dalla pipe, rendendo disponibile più spazio buffer. Il server pipe specifica le dimensioni del buffer per la pipe quando chiama CreatePipe.

Le operazioni di lettura e scrittura asincrone (sovrapposte) non sono supportate da pipe anonime. Ciò significa che non è possibile usare le funzioni ReadFileEx e WriteFileEx con pipe anonime. Inoltre, il parametro lpOverlapped di ReadFile e WriteFile viene ignorato quando queste funzioni vengono usate con pipe anonime.

Esiste una pipe anonima fino a quando non sono stati chiusi tutti gli handle della pipe, sia di lettura che di scrittura. Un processo può chiudere i relativi handle di pipe usando la funzione CloseHandle . Tutti gli handle della pipe vengono chiusi anche al termine del processo.

Le pipe anonime vengono implementate usando una pipe denominata con un nome univoco. Pertanto, è spesso possibile passare un handle a una pipe anonima a una funzione che richiede un handle a una pipe denominata.