In Mapping File Objekt schreiben/lesen



  • Hi,

    ich habe folgendes Problem.

    In Prozess 1 wird ein Mapping File Objekt und ein View des Mapping Objekts erzeugt.
    Anschließend wird Prozess 2 erzeugt, der in dieses Objekt 3 Zeichen schreiben soll und sich anschließend beendet.

    Prozess 1 soll dann diese 3 Zeichen wieder auslesen.

    Wie kann ich diese 3 Zeichen schreiben und lesen, und wie weiß Prozess 1 wo diese drei Zeichen stehen?

    Hier einmal der Code Prozess 1:

    HANDLE hFile = NULL;
    	LPVOID ptr; // = Typ des Returnwertes von MapViewOfFile()  
    
    	//Mapping File Objekt erzeugen
    	//(HANDLE)-1 -> geht auch
    	hFile =	CreateFileMapping(INVALID_HANDLE_VALUE,  // keine eigene Datei, sondern PageFile.sys 
    							  NULL,  // keine Sicherheitsattribute 
    							  PAGE_READWRITE,  // schreiben und lesen 
    							  0,4096,  // Größe (High+Low) 
    							 "TEST");  // Name 
    
    	if (hFile == NULL)
    	{
    		ShowError("FileMap-Objekt kann nicht erzeugt werden: ");
    	}
    
    	 // View des Objektes erzeugen 
    	ptr = MapViewOfFile(hFile,  // File-Map Objekt 
    						FILE_MAP_WRITE, // schreiben und lesen 
    						0,0,    // Offset (High+Low) 
    						4096);    // Größe 
    
    	cout.setf(ios::hex); 
    	cout << ptr << endl; 
    
    .......
    //Hier wird der Prozess 2 erzeugt
    

    Prozess 2:

    LPVOID ptr; // = Typ des Returnwertes von MapViewOfFile()  
    	 // View des Objektes erzeugen 
    	ptr = MapViewOfFile("TEST",  // File-Map Objekt 
    						FILE_MAP_WRITE, // schreiben und lesen 
    						0,0,    // Offset (High+Low) 
    						4096);    // Größe 
    
    	cout.setf(ios::hex); 
    	cout << ptr << endl; 
    
    	Sleep(500);
    	getch();
    	ExitProcess(EXIT_SUCCESS);
    	return 0;
    

  • Mod

    Du bekommst doch einen Zeiger. Dieser Zeiger ist die Start Adresse des Bereiches den Du einmapsst. Kopiere einfach die drei Zeichen auf diese Adresse.

    Der anderer Prozess kann die Daten einfach von diesem Zeiger lesen.



  • Hättest du da evt. eine Beispiel für mich?
    Stehe da nämlich auf dem Schlauch, weil auch "ptr" in Prozess 1 und 2 unterschiedlich ist.


  • Mod

    Hast Du denn überhaupt mal die basics gelesen?
    z.B. http://msdn.microsoft.com/en-us/library/ms810613.aspx

    Sicher sind die Zeiger unterschiedlich.
    Die entsprechende Datei kann in jedem Prozess auf einer anderen Speicherseite eingemappt werden. Es ist eben nur eine Speicherseite. Wo die liegt ist egal.

    Ansonsten
    http://lmgtfy.com/?q=CreateFileMapping+example
    Siehe da: Dritter Link!


Anmelden zum Antworten