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/