2010-04-12 6 views
0

win32api를 사용하면 다음 프로그램이 두 개의 프로세스를 만들고 파일 맵을 생성합니다. (C++ 사용)CreateFileMapping MapViewOfFile

Handle CreateFileMapping(...에 무엇을 써야할지 모르겠다. 나는 그것을 시도했다 : 또한 첫 번째 매개 변수는 INVALID_HANDLE_VALUE해야

PROCCESS_INFORMATION hfile. 

,하지만 내가 첫 번째 매개 변수로 MapViewOfFile에 쓸 모르겠어요.

첫 번째 프로그램의 코드 : (내가 프로그래밍되지 않은 2 & 3. 심지어 첫 번째는 작동하지 않기 때문에)

//Initial process creates proccess 2 and 3 

#include <iostream> 
#include <windows.h> 
#include <string> 

using namespace std; 

void main() 
{ 

bool ret; 
bool retwait; 
bool bhandleclose; 

STARTUPINFO startupinfo; 
GetStartupInfo (&startupinfo); 

PROCESS_INFORMATION pro2info; 
PROCESS_INFORMATION pro3info; 

//create proccess 2 
wchar_t wcsCommandLine[] = L"D:\\betriebssystemePRA2pro2.exe"; 


ret = CreateProcess(NULL, wcsCommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, 
    NULL, &startupinfo, &pro2info); 


if (ret==false){ 
    cout<<"Prozess konnte nicht erzeugt werden. Fehler:"<<GetLastError(); 
    ExitProcess(0); 
} 

//*************** 


//create process3 

wchar_t wcs2CommandLine[] = L"D:\\betriebssystemePRA2pro3.exe"; 


ret = CreateProcess(NULL, wcs2CommandLine, NULL, NULL, false, CREATE_NEW_CONSOLE, NULL, 
    NULL, &startupinfo, &pro3info); 


if (ret==false){ 
    cout<<"Prozess konnte nicht erzeugt werden. Fehler:"<<GetLastError(); 
    ExitProcess(0); 
} 



//*************** 



//create mapping object 

// program2: 




PROCESS_INFORMATION hfile; 





    CreateFileMapping( //erzeugt filemapping obj returned ein handle 
    INVALID_HANDLE_VALUE, //mit dem handle-->kein seperates file nötig 
    NULL, 
    PAGE_READWRITE, //rechte (lesen&schreiben) 
    0, 
    5, 
    L"myfile"); //systemweit bekannter name 


    LPVOID mappointer = MapViewOfFile(//virtuelle speicherraum, return :zeiger, der auf den bereich zeigt 
    INVALID_HANDLE_VALUE, //handle des filemappingobj. 
    FILE_MAP_ALL_ACCESS, 
    0, 
    0, 
    100); 



    //wait 
    cout<<"beliebige Taste druecken"<<endl; 
    cin.get(); 


//close 


bool unmap; 

unmap = UnmapViewOfFile (mappointer); 

if (unmap==true) 
    cout<<"Unmap erfolgreich"<<endl; 
else 
    cout<<"Unmap nicht erfolgreich"<<endl; 


bhandleclose=CloseHandle (INVALID_HANDLE_VALUE); 
cout<<bhandleclose<<endl; 

bhandleclose=CloseHandle (pro2info.hProcess); 
bhandleclose=CloseHandle (pro3info.hProcess); 


ExitProcess(0); 


} 

답변

2

MapViewOfFile을하여 CreateFileMapping에 의해 반환 된 핸들을 취

HANDLE hFileMapping = CreateFileMapping(...); 
LPVOID lpBaseAddress = MapViewOfFile(hFileMapping, ...); 
1

MapViewOfFile의 첫 번째 매개 변수로 CreateFileMapping의 반환 값을 전달해야합니다. 또한 MapViewOfFile에 매핑 할 바이트 수는보기가 파일 자체보다 길지 않을 정도로 작아야합니다.

HANDLE hMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 
            0, 5, L"myfile"); 

LPVOID mappointer = MapViewOfFile(hMapping, FILE_MAP_ALL_ACCESS, 0, 0, 5); 
관련 문제