这种匿名管道,和读写文件类似。最好是一个进程读,一个进程写,适合单向通信,不适于双向通信,双向通信容易导致的问题是有可能,读到自己进程刚才写的内容。
纯手工代码,没有一丝拷贝
父进程代码:
// PipeServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;#define BUFF_SIZE 1024void Test(){ SECURITY_ATTRIBUTES sec_handle = { 0}; sec_handle.bInheritHandle = TRUE; sec_handle.lpSecurityDescriptor = NULL; sec_handle.nLength = sizeof(sec_handle); HANDLE hReadPipe = INVALID_HANDLE_VALUE; HANDLE hWritePipe = INVALID_HANDLE_VALUE; BOOL bCrtPipeOk = CreatePipe(&hReadPipe,&hWritePipe,&sec_handle,BUFF_SIZE); if(!bCrtPipeOk) return ; STARTUPINFO siStartInfo; ZeroMemory( &siStartInfo, sizeof(STARTUPINFO) ); siStartInfo.cb = sizeof(STARTUPINFO); PROCESS_INFORMATION piProcInfo; ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) ); TCHAR szCommandLine[256] = { 0}; _stprintf_s(szCommandLine,_T("-hReadPipe %d -hWritePipe %d"),hReadPipe,hWritePipe); if(!::CreateProcess( _T("PipeClient.exe"), szCommandLine, NULL, NULL, TRUE, 0 | CREATE_NEW_CONSOLE, NULL, NULL, &siStartInfo, &piProcInfo)) { int nError = ::GetLastError(); cout<<"创建进程失败:"< <
子进程 代码
// PipeClient.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;void Test(HANDLE hRead,HANDLE hWrite){ char szWrite[] = ("I'm Client!!"); DWORD dwWritten = 0; cout<<"client now Write...."<