Это старый вопрос, но я не нашел ответа в Интернете, поэтому решил, что все равно отвечу.Вы должны зацикливаться, пока канал не читает, вот мой рабочий код:
DWORD bytesAvail = 0;
while(bytesAvail==0){
if( !PeekNamedPipe(pipeHandle, NULL, 0, NULL, &bytesAvail, NULL) ){
printf("PeekNamedPipe error %d.\n", GetLastError()); //error check
}
}
printf("Bytes available: %d\n", bytesAvail);
Конечно, это работает, только если вы уверены, что есть данные, ожидающие чтения, в противном случае вы застрянете в бесконечном циклепотому что на самом деле нет данных для чтения, поэтому всегда будет 0.