ich versuche verzweifelt, ein memmory mapping unter Linux zu erstellen. Also es gibt wohl zwei verschiedene Techniken dafür: shmget und POSIX' mmap. Das Erstere sieht so aus:
Code: Alles auswählen
{$IFDEF Unix}
inf.isFirstProcess := false;
mmfHandle := shmget(PInteger(@mmfName[1])^, SizeOf(TMapInfo), 0777);
if (mmfHandle < 0) then begin
inf.isFirstProcess := true;
mmfHandle := shmget(PInteger(@mmfName[1])^, SizeOf(TMapInfo), IPC_CREAT or 0777);
if (mmfHandle < 0) then begin Err.log(Err.ERROR, 'Cannot create MMF!'); Application.Terminate; end;
end;
mmf := shmat(mmfHandle, nil, 0777);
{$ENDIF}
if (inf.isFirstProcess) then fillChar(mmf^, SizeOf(TMapInfo), #0);
Funzt aber nur, wenn das Programm als root läuft. Angeblich soll es für normale user gehen, wenn man das 0777 in den flags benutzt (also so wie oben), aber defakto kommt trotzdem ein Fehler und ich muss mein Programm bzw. Lazarus immer über sudo [...] starten. (doof!)
Das Zweitere konnte ich nicht testen. Man braucht für mmap bzw. Fpmmap vorher shm_open aber das entsprechende Fpshm_open gibt es einfach nicht und ich weiß nicht, wie ich die Linux-API an dieser Stelle nativ ansprechen kann
Wer weiß Rat?