PeekNamedPipe: 将数据从命名管道或匿名管道复制到缓冲区中,而不将其从管道中删除。它还返回有关管道中数据的信息。
示例:
#include <iostream> #include <windows.h> #include <vector> using namespace std; 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; else { 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)] = '