반응형
//server
#include <stdio.h> #include <windows.h> // 익명의 Pipe : 단방향의 이름없는 pipe.(Named Pipe 는 양방향, 단방향 모두 가능) void main() { HANDLE hRead, hWrite; CreatePipe( &hRead, &hWrite, 0, 4096); // hWrite 에 쓰면 hRead에서 읽을수 있다. // hRead를 다른 프로세스에 전달해 주어야 한다. // 이미 다른 프로세스가 실행중이라면 DuplicateHandle()로 // 새롭게 자식을 만들면서 전달하려면 KO 상속을 이용한다. // 읽기 위한 핸들을 상속 가능하게 한다. SetHandleInformation( hRead, HANDLE_FLAG_INHERIT, HANDLE_FLAG_INHERIT); char cmd[256]; wsprintf( cmd, "child.exe %d", hRead); // 명령형 전달인자 사용 PROCESS_INFORMATION pi; STARTUPINFO si = { sizeof(si)}; BOOL b = CreateProcess( 0, cmd, 0, 0, TRUE, CREATE_NEW_CONSOLE,0,0,&si, &pi); if ( b ) { CloseHandle( pi.hProcess); CloseHandle( pi.hThread); CloseHandle( hRead ); } //-------------------------------------------- char buf[4096]; while ( 1 ) { printf("전달할 메세지를 입력하세요 >> "); gets( buf ); DWORD len; WriteFile( hWrite, buf, strlen(buf)+1, &len, 0); } } //client
#include <stdio.h> #include <windows.h> void main(int argc, char** argv) { if ( argc != 2 ) { printf("이프로그램은 직접 실행하면 안됩니다. 부모를 실행해 주세요\n"); return; } // 부모가 보내준 pipe 핸들을 꺼낸다. HANDLE hPipe = (HANDLE)atoi(argv[1]); char buf[4096]; while ( 1 ) { memset( buf, 0, 4096 ); DWORD len; BOOL b = ReadFile( hPipe, buf, 4096, &len, 0); if ( b == FALSE ) break; printf("%s\n", buf ); } CloseHandle( hPipe ); }
반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."