相关文章推荐
玩滑板的荔枝  ·  记录一次 ...·  5 月前    · 
气势凌人的油条  ·  PeekNamedpipe not ...·  7 月前    · 
销魂的水桶  ·  subprocess时报sudo: ...·  9 月前    · 
坚韧的闹钟  ·  c - Win32 API named ...·  9 月前    · 
有胆有识的玉米  ·  python ...·  1 年前    · 
int main( int argc, const char ** argv) wcout << " Creating an instance of a named pipe... " << endl; // Create a pipe to send data HANDLE pS = CreateNamedPipe(L " \\\\.\\pipe\\my_pipe " , PIPE_ACCESS_DUPLEX, 0 , 1 , 100 , 100 , 0 , NULL); // Open the named pipe HANDLE pC = CreateFile(L " \\\\.\\pipe\\my_pipe " , GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (pC == INVALID_HANDLE_VALUE) wcout << " Failed to connect to pipe. " << endl; return 1 ; wcout << " Test PeekNamedPipe #1. " << endl; DWORD PipeByteNum = 0 ; BOOL res = PeekNamedPipe(pC, NULL, 0 , NULL, & PipeByteNum, NULL); if (! res) wcout << " PeekNamedPipe() - failed. " << endl; return 1 ; wcout << " - Number of bytes in pipe: " << PipeByteNum << endl << endl; wcout << " Sending data to pipe... " << endl; const wchar_t* data = L " Hello Pipe World " ; DWORD numBytesWritten = 0 ; BOOL result = WriteFile(pS, data, wcslen(data) * sizeof (wchar_t), & numBytesWritten, NULL); if (result) wcout << " Number of bytes sent: " << numBytesWritten << endl; wcout << " Failed to send data. " << endl; return 1 ; wcout << " Test PeekNamedPipe #2. " << endl; PipeByteNum = 0 ; res = PeekNamedPipe(pC, NULL, 0 , NULL, & PipeByteNum, NULL); if (! res) wcout << " PeekNamedPipe() - failed. " << endl; return 1 ; wcout << " - Number of bytes in pipe: " << PipeByteNum << endl << endl; wcout << " Reading data from pipe... " << endl; // The read operation will block until there is data to read wchar_t buffer[ 128 ]; DWORD numBytesRead = 0 ; result = ReadFile(pC, buffer, 5 * sizeof (wchar_t), & numBytesRead, NULL); if (result) buffer[numBytesRead / sizeof (wchar_t)] = ' \0 ' ; // null terminate the string wcout << " Number of bytes read: " << numBytesRead << endl; wcout << " Message: " << buffer << endl; wcout << " Failed to read data from the pipe. " << endl; return 1 ; wcout << " Test PeekNamedPipe #3. " << endl; PipeByteNum = 0 ; DWORD bytesAvail = 0 ; BOOL isOK = PeekNamedPipe(pC, NULL, 0 , NULL, & bytesAvail, NULL); // Allocate buffer and peek data from pipe DWORD bytesRead = 0 ; std::vector <wchar_t> buffer_(bytesAvail); isOK = PeekNamedPipe(pC, &buffer_[ 0 ], bytesAvail, & bytesRead, NULL, NULL); if (! isOK) wcout << " PeekNamedPipe() - failed. " << endl; return 1 ; wcout << " - Number of bytes in pipe: " << bytesRead << endl << endl; // Close client. CloseHandle(pC); wcout << " Done with client. " << endl; // Close the pipe. CloseHandle(pS); wcout << " Done with server. " << endl; return 0 ;

ReadFile会先从管道内读取5*sizeof(wchar_t)大小的字节,然后PeekNamedPipe会读取剩下的字节。最后缓存区buffer_会打印“ Pipe World”