From 5901527c6ecd6b99907f6f7b6b416a65546ce530 Mon Sep 17 00:00:00 2001 From: zhaolei <353719554@qq.com> Date: Sat, 16 May 2026 19:59:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4linux=E7=BC=96=E8=BE=91slfio?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Slfio/include/CStringType.h | 2 +- Slfio/src/slf.cpp | 38 +++++++++++++++++++++++++------------ 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/Slfio/include/CStringType.h b/Slfio/include/CStringType.h index d631b0d..0c023fa 100644 --- a/Slfio/include/CStringType.h +++ b/Slfio/include/CStringType.h @@ -48,7 +48,7 @@ typedef void *HANDLE; #else typedef unsigned int DWORD; typedef DWORD *LPDWORD; -typedef void *HANDLE; +typedef unsigned int HANDLE; typedef unsigned char byte; typedef bool BOOL; #endif diff --git a/Slfio/src/slf.cpp b/Slfio/src/slf.cpp index 798fe69..21f6772 100644 --- a/Slfio/src/slf.cpp +++ b/Slfio/src/slf.cpp @@ -3,7 +3,10 @@ #include #include #ifdef WIN32 - #include +#include +#else +#include +#include #endif // WIN32 #include "slf.h" #include @@ -59,11 +62,11 @@ wchar_t* AnsiToUnicode(const char* szStr) } int IsMappingMem(const char *MemName) { + QString slf1=MemName; + slf1.replace("\\","/"); + slf1.replace(".","_"); #ifdef WIN32 - QString slf1=MemName; - slf1.replace("\\","/"); - slf1.replace(".","_"); - wchar_t *pname=AnsiToUnicode(slf1.toStdString().c_str()); + wchar_t *pname=AnsiToUnicode(slf1.toStdString().c_str()); HANDLE hMapFile = OpenFileMapping(FILE_MAP_READ, false, pname); @@ -72,15 +75,19 @@ int IsMappingMem(const char *MemName) CloseHandle(hMapFile); return fInit; #else - return 0; + int hMapFile = open(slf1.toStdString().c_str(), O_RDONLY); + if (hMapFile<0) + return 0; + close(hMapFile); + return 1; #endif } bool MappingMem(HANDLE *hHandle,LPSTR *hMem,int len,const char* name) { + QString slf1=name; + slf1.replace("\\","/"); + slf1.replace(".","_"); #ifdef WIN32 - QString slf1=name; - slf1.replace("\\","/"); - slf1.replace(".","_"); wchar_t *pname=AnsiToUnicode(slf1.toStdString().c_str()); HANDLE hMapFile = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE, false, @@ -105,11 +112,16 @@ bool MappingMem(HANDLE *hHandle,LPSTR *hMem,int len,const char* name) 0, // high offset: map from 0, // low offset: beginning 0); // default: map entire file - if (*hMem == NULL) return FALSE; - return TRUE; #else - return FALSE; + HANDLE hMapFile = open(slf1.toStdString().c_str(),O_RDONLY)); + if((hMapFile < 0) + { + return false; + } + *hMem = (LPSTR)mmap(0,0,PROT_READ,MAP_SHARED,hMapFile,0)); #endif + if (*hMem == NULL) return FALSE; + return TRUE; } void CloseView(HANDLE hMapObject,LPVOID lpvMem) @@ -118,6 +130,8 @@ void CloseView(HANDLE hMapObject,LPVOID lpvMem) if(lpvMem)UnmapViewOfFile(lpvMem); if(hMapObject)CloseHandle(hMapObject); #else + if(lpvMem)munmap(m_rbuf, m_mapsize); + if(hMapObject)close(hMapObject); return; #endif }