태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.


댓글 하나가 운영자에겐 커다란 힘이 됩니다!

이름없는 파이프

 - 하나의 프로세스가 생성 / 전달

 - 전달

   실행중 : 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...

위의 정보가 도움이 되셨나요? 그렇다면 댓글 하나만 남겨주세요.
댓글 하나가 운영자에겐 커다란 힘이 됩니다!

  1. 카루딘

    | 2009/11/02 01:01 | PERMALINK | EDIT | REPLY |

    트랙백 날렸어용~ 잘보고 갑니다 ^^

Write your message and submit
« PREV : 1 : ... 64 : 65 : 66 : 67 : 68 : 69 : 70 : 71 : 72 : ... 442 : NEXT »