Operações de pipe anônimo
A função CreatePipe cria um pipe anônimo e retorna dois identificadores: um identificador de leitura para o pipe e um identificador de gravação para o pipe. O identificador de leitura tem acesso somente leitura ao pipe e o identificador de gravação tem acesso somente gravação ao pipe. Para se comunicar usando o pipe, o servidor de pipe deve passar uma alça de pipe para outro processo. Normalmente, isso é feito por meio da herança; ou seja, o processo permite que o identificador seja herdado por um processo filho. O processo também pode duplicar um identificador de pipe usando a função DuplicateHandle e enviá-lo para um processo não relacionado usando alguma forma de comunicação entre processos, como DDE ou memória compartilhada.
Um servidor de pipe pode enviar o identificador de leitura ou o identificador de gravação para o cliente de pipe, dependendo se o cliente deve usar o pipe anônimo para enviar informações ou receber informações. Para ler do pipe, use o identificador de leitura do pipe em uma chamada para a função ReadFile . A chamada ReadFile retorna quando outro processo é gravado no pipe. A chamada ReadFile também poderá retornar se todos os identificadores de gravação no pipe tiverem sido fechados ou se ocorrer um erro antes da conclusão da operação de leitura.
Para gravar no pipe, use o identificador de gravação do pipe em uma chamada para a função WriteFile . A chamada WriteFile não retorna até que tenha gravado o número especificado de bytes no pipe ou que ocorra um erro. Se o buffer de pipe estiver cheio e houver mais bytes a serem gravados, WriteFile não retornará até que outro processo seja lido do pipe, disponibilizando mais espaço de buffer. O servidor de pipe especifica o tamanho do buffer para o pipe quando ele chama CreatePipe.
Não há suporte para operações de leitura e gravação assíncronas (sobrepostas) por pipes anônimos. Isso significa que você não pode usar as funções ReadFileEx e WriteFileEx com pipes anônimos. Além disso, o parâmetro lpOverlapped de ReadFile e WriteFile é ignorado quando essas funções são usadas com pipes anônimos.
Existe um pipe anônimo até que todas as alças de pipe, leitura e gravação, tenham sido fechadas. Um processo pode fechar suas alças de pipe usando a função CloseHandle . Todas as alças de pipe também são fechadas quando o processo é encerrado.
Pipes anônimos são implementados usando um pipe nomeado com um nome exclusivo. Portanto, muitas vezes você pode passar um identificador para um pipe anônimo para uma função que requer um identificador para um pipe nomeado.