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 erzeugtProzess 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;
-
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.
-
Hast Du denn überhaupt mal die basics gelesen?
z.B. http://msdn.microsoft.com/en-us/library/ms810613.aspxSicher 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!