Condividi tramite


Operazioni di pipe anonime

La funzioneCreatePipecrea una pipe anonima e restituisce due handle: un handle di lettura per la pipe e un handle di scrittura nella pipe. L'handle di lettura ha accesso in sola lettura alla pipe e l'handle di scrittura ha accesso in sola scrittura alla pipe. Per comunicare tramite 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 funzioneDuplicateHandlee inviarla a un processo non correlato usando una forma di comunicazione interprocesso, ad esempio DDE o memoria condivisa.

Un server pipe può inviare l'handle di lettura o l'handle di scrittura al client pipe, a seconda che il client debba usare la pipe anonima per inviare informazioni o ricevere informazioni. Per leggere dalla pipe, usare l'handle di lettura della pipe in una chiamata alla funzioneReadFile. La chiamata ReadFile restituisce quando un altro processo è stato scritto nella pipe. La chiamata ReadFile può restituire anche se tutti gli handle di scrittura alla 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 funzioneWriteFile. 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 sono presenti più byte da scrivere, WriteFile non restituisce finché 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 dalle pipe anonime. Ciò significa che non è possibile usare ilReadFileExe le funzioni 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 di pipe, sia di lettura che di scrittura. Un processo può chiudere i relativi handle pipe usando la funzione CloseHandle. Tutti gli handle di pipe vengono chiusi anche quando il processo termina.

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