Die Namen weichen leicht ab, aber Du wirst die entsprechenden Libs schon haben
Meine bisherigen Versuchen schlagen leider bei mmap fehl und mir fehlt die Zeit das
weiter zu untersuchen, vielleicht hat ja noch jemand Ideen. Hier der bisherige Code, der
noch nicht funktioniert!:
Code: Alles auswählen
DeclareModule FileMap
Declare Create(Name.s, Size.i)
Declare Open(Name.s)
Declare Close(*Mem)
EndDeclareModule
Module FileMap
EnableExplicit
Global hMap.i
CompilerSelect #PB_Compiler_OS
CompilerCase #PB_OS_Windows
Procedure Create(Name.s, Size.i)
hMap = CreateFileMapping_(#INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE | #SEC_COMMIT | #SEC_NOCACHE, 0, Size, @Name)
If hMap
ProcedureReturn MapViewOfFile_(hMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
EndIf
EndProcedure
Procedure Open(Name.s)
hMap = OpenFileMapping_(#FILE_MAP_ALL_ACCESS, 0, @Name)
If hMap
ProcedureReturn MapViewOfFile_(hMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
EndIf
EndProcedure
Procedure Close(*Mem)
UnmapViewOfFile_(*Mem)
CloseHandle_(hMap)
EndProcedure
CompilerCase #PB_OS_Linux
#O_RDWR = $2
#O_CREAT = $100
#PROT_READ = $1
#PROT_WRITE = $2
#PROT_EXEC = $4
#MAP_SHARED = $1
ImportC "-lrt"
shm_open(name.p-Unicode, oflag, mode)
shm_unlink(name.p-Unicode)
EndImport
Global gSize.i, gName.s
Procedure Create(Name.s, Size.i)
Name = ReplaceString(Name, "/", "")
Name = "/" + Left(name, 254)
hMap = shm_open(name, #O_CREAT | #O_RDWR, 0)
If hMap
gSize = Size
gName = Name
ProcedureReturn mmap_(0, Size, #PROT_READ | #PROT_WRITE, #MAP_SHARED, hMap, 0)
EndIf
EndProcedure
Procedure Open(Name.s)
Name = ReplaceString(Name, "/", "")
Name = "/" + Left(name, 254)
hMap = shm_open(name, #O_RDWR, 0)
If hMap
ProcedureReturn mmap_(0, gSize, #PROT_READ | #PROT_WRITE, #MAP_SHARED, hMap, 0)
EndIf
EndProcedure
Procedure Close(*Mem)
If Not munmap_(*Mem, gSize)
shm_unlink(gName)
EndIf
EndProcedure
CompilerEndSelect
EndModule
Vielleicht findet ja noch jemand das Problem, bzw. besser die Lösung
Gruß
Thomas