2012-03-20 1 views
2

C에서 두 개의 .exe 파일을 만들려고합니다. 처음에는 메모리에 데이터를 저장하고 .txt에 대한 데이터의 포인터를 저장합니다. 두 번째는 .txt에서 포인터를 읽고 그것들을 표시합니다. 첫 번째다른 exe 파일에서 데이터를 호출 할 때 같은 포인터를 사용할 수 있습니까?

: fw = fopen("pointer.txt", "w"); fprintf(fw, "%p", &data); fclose(fw);

일초 : fr = fopen("pointer.txt", "r"); fscanf(fr, "%p", &pointer);

하지만 두 번째를 실행할 때 임의의 숫자를 표시합니다.

무엇이 잘못 되었나요?

+3

나는 매우 재미 있고 완전히 결백 한 "파일에 포인터 값을 저장하려고했습니다"라는 이유로 upvoting했습니다. – adelphus

답변

2

프로세스는 실제 메모리에서는 작동하지 않지만 시스템에 의해 할당 된 가상 메모리는 작동하지 않습니다. 따라서 0x01111에서 P10x01111P2은 RAM의 동일한 섹터를 가리 키지 않습니다. 에고, 아니, IPC를 사용해야 겠어.

2

아니요 그렇게하지 마십시오.
주소가 두 번째 exe 실행 프로세스에서 유효하지 않을 수 있습니다.

각 프로세스에는 주소 공간이 할당되며 각 exe는 별도의 프로세스로 실행됩니다. 따라서 두 프로세스에 할당 된 주소 공간은 완전히 다를 수 있습니다.

일반적으로 운영 체제는 프로세스에 할당 된 메모리를 회수하지만 파일 핸들과 같은 특정 리소스는 회수 할 수 없습니다. 따라서 첫 번째 프로세스가 끝나면 변수에 할당 된 메모리가 OS에서 회수됩니다. 당신이 (당신이 그들 사이의 의사 소통을해야하는 경우 두 프로세스가 살아있다)이 개 활성 프로세스을 통해 내용을 공유하려는 경우

, 당신은 Interprocess Communication Mechanism(IPC), 거기에 다양한 IPC 메커니즘이 있으며 하나는 일반적으로 IPC 메커니즘을 선택하는 것이 필요 성능에 따라 프로세스가 관련이 있는지 또는 동기화가 필요한지 여부 등에 따라 달라집니다.

두 개의 비활성 프로세스간에 내용을 공유하려는 경우 (둘 중 하나가 통신해야 할 때 프로세스가 작동하지 않음) , 그 내용을 파일에 저장하는 것은 좋은 생각이지만, 메모리 주소가 아닙니다.

1

가상 메모리는 프로세스 단위입니다. 이에 대해서는 Wikipedia을 참조하십시오.

1

원하는 작업을 수행 할 수는 있지만 접근 방식이 올바르지 않습니다. 각 프로세스마다 고유 한 가상 주소 공간이 있으므로 한 프로세스에서 의미가있는 주소가 다른 프로세스에 의미가 없을 수도 있고, 같은 메모리에.

이와 같은 프로세스간에 리소스를 공유하려는 경우 Windows에서 요청하도록 요청해야합니다. 자세한 내용은이 페이지를 참조하십시오 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa366878%28v=vs.85%29.aspx.

+0

OP가 Windows에 있다고 가정합니다. –

+2

"EXE"를 사용하는 다른 OS가 있습니까? 예를 들어, – FatalError

+0

DOS (나는 조업 중이 야) –