PeekNamedPipe(
    tmp_pipe,                // __in       HANDLE hNamedPipe,
    NULL,                  // __out_opt  LPVOID lpBuffer,
    0,                     // __in       DWORD nBufferSize,
    NULL,                  // __out_opt  LPDWORD lpBytesRead,
    &totalBytesAvailable,  // __out_opt  LPDWORD lpTotalBytesAvail,
    NULL                   // __out_opt  LPDWORD lpBytesLeftThisMessage
  );

我已经将字节写入管道的其他位置,但是totalBytesAvailable始终是0,为什么?

最佳答案

我发现在Windows中,如果在调用PeekNamedPipe之前先调用ReadFile,即使实际上有待读取的字节,它也将始终返回零字节。您必须先调用ReadFile,然后调用PeekNamedPipe,并保持循环直到PeekNamedPipe返回零字节。

我已经注意到,即使在这种情况下,即使仍有剩余字节,PeekNamedPipe有时也会返回零字节。必须是时机。发送者将必须在每个消息的开头加上字节数。叹...

关于c - PeekNamedPipe始终为totalBytesAvailable返回0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3673190/

10-10 12:45