2013-10-09 6 views
0

다른 프로세스에 파이프 핸들을 보내려고합니다. 포인터를 보내려면 문자열로 변환해야합니다. 핸들 값 0x00043c 경우 char *에서 Handle까지

sprintf(handleToChar, "%p", handle); 

그래서 "00043c"을 갖는 메모리를 얻는다. 내가 그것을 보냈다.

"00043c"의 올바른 형식으로 수신합니다.

다시 변환 할 수 없습니다. 나는 sprintf를 다시 사용해 보았지만 나중에 깨달았을 때 그 점은 잘못되었습니다.

sprintf((char*)handle, "%s", handleToChar); // <-- wrong 

은 내가 atoi 할 것입니다하지만 너무 문자열의 문자가있을 수있다 생각했다. 그래서 그것은 다시 실패했다.

어떻게 할 수 있습니까?

+0

이것은 단순히 작동하는 방식이 아닙니다. 가상 주소 공간에서 읽기 - 모든 프로세스마다 고유 한 방법이 있습니다. –

답변

2

간단히 할 수 없습니다. 프로세스간에 주소를 공유 할 수 없습니다.

두 프로세스간에 리소스를 공유하려는 경우 다른 프로세스가 자체 핸들을 만들 수 있도록 공유 리소스를 만들거나 다른 데이터를 저장/보내야합니다.

+0

실제로 파이프는 Windows에서도 처리되므로 다른 프로세스에 파이프 핸들을 보내야합니다. –

+0

@AshishNegi 핸들을 보내지 마십시오. 명명 된 파이프를 만들고 해당 파이프의 * name *을 다른 프로세스에 보냅니다. 다른 프로세스는 그 이름을 사용하여 파이프의 끝을 만들고 고유 한 핸들을 얻습니다. –

0

공유 메모리를 만들 수 있습니다.