Windows IPC - Pipe(이름없는 파이프)
Posted 2009/04/24 01:29|
|
|
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
이름없는 파이프
- 하나의 프로세스가 생성 / 전달
- 전달
실행중 : DuplicateHandle()
자식일때 : 상속
자식의 표준 입출력과 연결
--------------------------- pipe_a.exe ------------------------------
파이프 생성 / 전달
#include <windows.h>
#include <stdio.h>
void main()
{
HANDLE hRead, hWrite;
// 익명의 pipe - 단방향
CreatePipe(&hRead, &hWrite, 0, // 보안 속성
1024); // 버퍼 크기
// 이미 실행중인 프로세스에 전달해 주려면
// DuplicateHandle()로 복사한 후 메세지를
// 보내서 핸들을 전달
//
// 자식에게 전달하려면 KO 상속 사용 -> 읽기
// 위한 핸들을 상속 가능하게 변경한다
SetHandleInformation( hRead, HANDLE_FLAG_INHERIT,
HANDLE_FLAG_INHERIT);
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
char name[256] = {0};
wsprintf(name, "child.exe %d", hRead);
BOOL b = CreateProcess(0, name, 0, 0,
TRUE, // TRUE : KO핸들 테이블 상속
CREATE_NEW_CONSOLE, // 자식 프로세스용 새로운
// console을 만들어라
0, 0, &si, π);
if(b)
{
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
CloseHandle(hRead);
}
//--------------------------------------------------------------
// 이제 pipe를 통해서 자식에게 값을 전달한다.
while(1)
{
char data[4096] = {0};
gets(data);
DWORD len;
WriteFile(hWrite, data, 4096, &len, 0);
}
}
--------------------------- child.exe -------------------------------
부모로 부터 전달받은 메세지 출력
#include <windows.h>
#include <stdio.h>
void main(int argc, char *argv[])
{
if(argc != 2)
return ;
// 부모가 command line args로 전달한 파이프 핸들을 얻는다
HANDLE hRead = (HANDLE)atoi(argv[1]);
DWORD len;
while(1)
{
char data[4096] = {0};
ReadFile(hRead, data, 4096, &len, 0);
printf("%s\n", data);
}
}
// 빌드해서 child.exe를 만들어라
// 완성된 child.exe를 복사해서 부모소스 쪽 폴더에 옮겨 놓아라
// 부모를 실행해보아라
// 문자열 입력후 enter...
위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!
- Filed under : 프로그래밍/MFC & Win32
- 1 Comment 1 Trackback


카루딘
| 2009/11/02 01:01 | PERMALINK | EDIT | REPLY |트랙백 날렸어용~ 잘보고 갑니다 ^^