Zugriff auf Memory Mapped File -> Ringpuffer



  • Hi,

    in meinem Programm wird im Main Prozess der Ringpuffer initalisiert und angelegt.
    Die beiden erzeugten Prozesse sollen auf diesen Ringpuffer zugreifen.(Semaphoren kommen noch)
    Mein Problem ist, dass ich nicht weiß, wie die beiden Prozesse auf den Ringpuffer zugreifen sollen.

    Hier einmal der entsprechene Codeabschnitt aus dem Main-Prozess:

    //Initalisierung des Ring Buffers
    	for (int i = 0; i < N; i++) 
    	{
    		ring.element[i] = 0;
    	}
    	ring.nextEmpty = 0;
    	ring.nextFull = 0;
    
    	//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) 
    		"Ringbuffer");  // Name 
    
    	if (hFile == NULL)
    	{
    		ShowError("FileMap-Objekt kann nicht erzeugt werden: ");
    	}
    
    	// View des Objektes erzeugen 
    	ringptr = (struct buffer*)MapViewOfFile(hFile,  // File-Map Objekt 
    		FILE_MAP_WRITE, // schreiben und lesen 
    		0,0,    // Offset (High+Low) 
    		4096);    // Größe 
    
    	if (ringptr == NULL)
    	{
    		ShowError("Pointer MapViewofFile konnte nicht erzuegt werden");
    	}
    

    Code Prozes_1. ka ob das sie richtig wäre.

    HANDLE hFile = NULL;
    
    	//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) 
    		"Ringbuffer");  // Name 
    
    	if (hFile == NULL)
    	{
    		ShowError("FileMap-Objekt kann nicht erzeugt werden: ");
    	}
    
    	LPVOID ringptr; // = Typ des Returnwertes von MapViewOfFile()  
    	// View des Objektes erzeugen 
    	ringptr = MapViewOfFile(hFile,  // File-Map Objekt 
    		FILE_MAP_WRITE, // schreiben und lesen 
    		0,0,    // Offset (High+Low) 
    		4096);    // Größe 
    
    	if (ringptr == NULL)
    	{
    		ShowError("Pointer MapViewofFile konnte nicht erzuegt werden");
    	}
    

Anmelden zum Antworten